栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

3n+1的点分布图

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3n+1的点分布图

一点也不好看。

from tkinter import *
master = Tk()

canvas_width = 1200
canvas_height = 400
w = Canvas(master, 
           width=canvas_width,
           height=canvas_height)
w.pack()
w.create_line(10,0, 10, canvas_height, fill="#0000FF", width=1)
w.create_line(0,canvas_height//2, canvas_width, canvas_height//2, fill="red", width=1)
def line(p2):
    a,b,c,d=p2
    w.create_line(a, b, c, d, fill="#476042", width=1)
    
##===================================
"""
这里,在collatz变换中,一个正整数变成1的过程中,
遇到的奇数称之为接入点。接入点连在一起,
成为接入链路。它们距离终端1有多少节,称为阶。比如
5是一阶接入点,7为五阶接入点。
"""

def yap(n,z=2):
    i=0
    while n>1 and n % z ==0:
            n //=z
            i+=1
    return i,n
##---------------------    在某一范围内求,接入点和环
di={} #已知的 接入点和阶记录

def apnt(n):
    s=[]# 记录前进中遇到的奇数
    t=0
    if n <=0:return
    #ct=0
    #print('--',n)

    ll=2
    while n!=1:
        #ct+=1
        if n%2 ==1:
            if n in di :#和已知某路径接续
                b=di[n]

                for a in s: #增添新的接入点
                    di[a]=t+b
                    x1=a/128  # 把奇数缩小作为x坐标
                    y1=(t+b)*4  # 阶数放大作为y坐标
                    p2=x1,y1,x1+1,y1+1
                    line(p2)
                    t-=1
                s=[] #____________
                #print('brk')
                break
            else:
                s+=[n]
                t+=1
            n=n*3+1
        else:
            n=yap(n)[1]        
        #print(ct,n)
    #__________________________     
    if s!=[]:# 全新的路径,新的接入点
        for a in s:
            di[a]=t
            t-=1
for i in range(60000):
    apnt(i)
'''

def ff():# 打印[接入点和阶记录]字典
    v=list(di.items())
    v=sorted(v,key=lambda x:x[1])
    for i in v:
        print(i)
    print()
##-----------------

ccd={} #用来在某环统计接入点个数(在某个范围下)
ccp={} #记录某环上的接入点
def cc():# 制作上面2字典
    for i in di:
        r=di[i]
        if r  in ccd:
            ccd[r]+=1
            ccp[r]+=[i]
        else:
            ccd[r]=1
            ccp[r]=[i]
'''           
mainloop()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号