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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值