精华内容
下载资源
问答
  • Collatz猜想

    2021-09-08 10:17:54
    最近在学习python,书中有一个实践项目,关于Collatz猜想。分享我的代码 def collatz(number): # Collatz猜想 if number % 2 == 0: #若为偶数,则整除2 number //= 2 print(number) return number else: #若为...

    最近在学习python,书中有一个实践项目,关于Collatz猜想。分享我的代码

    def collatz(number): # Collatz猜想
        
        if number % 2 == 0: #若为偶数,则整除2
            number //= 2
            print(number)
            return number
        else:               #若为奇数,则乘3加1
            number *= 3
            number += 1
            print(number)
            return number
    
    print('Enter number: ')
    
    while True:
        try: # 在输入中捕捉错误
            num = int(input())
            if num < 1: #判断输入的是否为正整数
                print('You must enter a positive integer number!')
                continue
            break #若捕捉到错误,会直接执行except子句,不会break; 而当输入正确时,则会跳出循环
        except ValueError: #若输入不是整数字符串,会返回ValueError错误
            print('You must enter a integer number!')
    
    
    
    while num != 1:
        num = collatz(num) #不断调用collatz(),最终肯定会返回1
        ```
    
    展开全文
  • 定义了Collatz波集CWS及作用在其上的3-1映射triim,探讨了CWS在triim映射下的性质,从另一个角度对Collatz猜想进行了探讨,以期为最终证明Collatz猜想提供了一个全新的思路。
  • Collatz猜想的证明思路

    千次阅读 2019-02-09 17:17:02
    Collatz猜想(又称冰雹猜想,角谷猜想,下简称C猜想):对于任何正整数Z,经过以下步骤后: 如果Z为偶数,则除以2 如果Z为奇数,则乘以3 再加1 将得到的新的整数Z’ 最后,该算法必然会使Z收敛于1。即使再执行算法...

    1、猜想定义及其数学描述

    Collatz猜想(又称冰雹猜想,角谷猜想,下简称C猜想):对于任何正整数Z,经过以下步骤后:

    1. 如果Z为偶数,则除以2
    2. 如果Z为奇数,则乘以3 再加1
    3. 将得到的新的整数Z’

    最后,该算法必然会使Z收敛于1。即使再执行算法,也只会得到 à 4 à2à1à4…..的无限循环。

    如果定义一个函数F = (3 n + 1) / 2m , 则该算法可以描述为了一个有有限多个函数F递归迭代的形式G = F(F(F….(F(X0)))。

    但也许正如大数学家厄特希(P.Erdos)的说法:"数学还没有成熟到足以解决这样的问题!"

     

    2、关于猜想的证明

    关于证明该猜想,网上流传很多种证明方法。但从数学的角度来说,都不够严谨,很多到最后都只抛出一句:“可以预见,经过若干次步骤必然会趋向于1”

    这从数学的严谨性来说,这是不可接受。起码,要给出进行“预见”的方法及其数学原理。但很多都只是搁下一句狠话就完了。

    下面给出我对该猜想的一些研究,虽然还不能说给出该猜想的完全证明,但起码可以证明出很大一部分的整数是符合猜想的规律。而且下文的证明是构造性的,也就是通过该证明可以很轻易地验证出哪些整数是一定符合猜想。

    而且透过该证明方法,可以得出证明该猜想的一条有效路径,接下来的工作,就是如何将证明方法进行泛化,使证明能适应于一切正整数范围,从而真正解决该猜想。下面的推导比较长,请大家做好心理准备。

    (由于本文是通过word文档直接拷贝过来的,如果因格式问题看不懂,可联系本人获取原稿)

    下面约定以下符号:

     qp 或 q ^ p :表示q 的p 次方

    A(q)n 表示以1为首项,公比为q的等比数列的第n项

    S(q) 为以1为首项,公比为q的等比数列求和式。

    S(q)n 为以1为首项,公比为q的等比数列第n项求和式。

    S(q-n)为以为An首项,公比为q的等比数列求和式。

    S(q-n)为以为An首项,公比为q的等比数列求和式。

    S(q-n)n 为以为An首项,公比为q的等比数列第n项求和式。

     

    2-1 倒推法

    2-1-1 第一层倒推

    证明该猜想我个人觉得最佳的办法是倒推法。

    从结果来看,算法经过若干步骤后,必然会得一个2 ^ m形式的整数。而这个2 ^ m的整数必然是由3n + 1的办法来构造出来的。

    于是就有下式:

    3n + 1 = 2 ^ m (1)

    移项得 : 3n = 2 ^ m – 1 (2)

    也就是说 2 ^ m – 1 能够被3 整除。

    由二项式定理知:

    2 ^ m – 1 = (2 - 1) (1 + 21 + 22 + … + 2 ^ m-1 ) =  1 + 2^1 + 2^2 + … + 2^m-1

    也就是说2^m – 1 恰好是 以一个以1 开头,公比为2的等比数列之和Sm-1。

    那Sm-1 什么时候可以被3整除呢?

    我们可以先看m = 3的情况,S2 = 1 + 2 = 3 , 3 | S2

    再看看m = 4 的情况, S3 = 1 + 2 + 4 = 7 , 4 X S3

    M = 5 , S4  = 1 + 2 + 4 + 8 = 15 , 3 | S4

    可以清晰看到当M是一个奇数的情况下,Sm-1可以被3整除。

    这是个巧合吗?下面的引理给出该猜想的证明。

    引理1 : Sn为一个以1为首元素,2为公比的等比数列之和,若数列的长度n 为偶数时,Sn能被3整除。

    通过数学归纳法将轻易得到证明:

    先计算n = 2 ,由S2 = 1 + 2 = 3 , 3 | S2 。引理得证

    现假设 n = k(k为偶数)时,定理仍然成立。

    则当n = k + 2 时, Sk+2 = Sk+2 + 2^k+1 + 2^k+2 = Sk+2 + (1 + 2 ) * 2^k+1 = Sk+2 + 3 * 2^k+1  , 由Sk + 1可被3整除可知,Sk+2  也应当可被3整除。

    由数学归纳法知,引理成立。

    这个引理明确地告诉我们,若C猜想成立,则所有的正整数经过算法的多次迭代后,必定最终变成2的偶数次方的形式。

    举例 5 --> 16 --> 1 , 21 --> 64 --> 1 , 85 --> 256 --> 1………

    这样就可以得到一族整数,是必定满足猜想的:

     P = { N | 3k + 1 = 2^m , n = k*2t , k,m,t ∈Z+ ,2|m - 1 }

    也就是说5, 10 ,20,40……和21,42,84,………都满足猜想。现在已经成功证明了,存在着无穷多个正整数都满足c猜想。下个问题是,这个整数集是否是完备的。显然不是完备的,因为6就不在此列。现在希望对P的范围进行扩充。现在倒推只进行一了次除2操作和3n+1操作。显然更多的数是需要进行多次这种操作的。继续进行反推。

    定义两个算子:除法算子D , D(n) = n / 2 ,乘法算子M, M (n) = 3n + 1

    由P满足猜想,可知如果一个整数Z不属于P的,经过M和D后得到一个属于P的整数Z’,那么Z也满足猜想。

    因为Z不属于P,那么Z至少进行过一次M。因为D只能使整数Z在P范围内转移。

    这样可以得到一个新的整数集 P’ = { N | 3k + 1 = p, n = k*2t , p ∈ P , n,k,t ∈Z+ }。

    下面来讨论这个整数集是否存在。存在的条件是什么?

    由P’的定义可知 整数族的存在关键在于k的取值。也就是3k + 1 能否等于5,10,20,40…..或者21,42,84,……。显然,这个整数族是存在的,因为3k+ 1 = 10可得出k=3。

    进一步,由M (n) = 3n + 1的定义可知,只要在P中出现除3余1 的数,那么P’就一定会存在。因此,P’存在的充分条件为P中是否存在除3余1的数

    于是有另外一个定义P’ = { N | 3k + 1 = p, n = k*2t , p ∈ P且p = 1(mod 3) , n,k,t ∈Z+ }

    那么P中有哪些是除3余1的数呢?

    首先3作为模,是一个素数,2与3互质,所以如果 n 与3互质,由数论知识知,那2^m * n 一定遍历3的既约剩余系,如5 与3互质 ,5 = 2 (mod 3), 10 = 1(mod3), 15= 0 (mod 3),20 = 2( mod 3)。。。。。

    也就是只要找出在P中使k 与3互质的,就一定可以逆推出P’。

    下面的问题又变成了,哪些k 与3互质呢?

    我们已经知 (5,3) = 0, (21,3) = 3, 255 = 28 – 1 = 3 * 85 , (85,3) = 0,1023 = 210 – 1= 3 * 341, (341, 3) = 0, 4095 = 212 – 1 =3 * 1365,(1365,3) = 3。这里似乎隐含着一个规律:以3为周期。

    下面的引理进一步揭示了该规律。

    引理2 : Sn为一个以1为首,2为公比的等比数列之和,若数列的长度n 整除6时,Sn能被9整除。

    举例:S6 = 1 + 2 + 4 + 8 + 16 + 32 = 63 = 7 * 9 。

    证明:(依然使用数学归纳法)

    由S6 满足条件,可假设Sk 也满足条件,其中6 | k。

    现考察Sk + 6 = Sk + 2k + 1 + 2k + 2 + 2k + 3 + 2k + 4+ 2k + 5 + 2k + 6 = Sk + (1 + 2 + 4 + 6 + 16 + 32) * 2k + 1

    = Sk + S6 * 2k + 1 。由9 | S6 可知,9 | Sk+1  ,引理证毕。

    引理2 揭示了一个事实,只有当6 | m - 1 , 才没法逆推P’,其余的都可以进行逆推。

    至此由P 逆推至P‘的关系已经完全清楚了,现在终于可以去掉P’里面的迭归定义了。

    P’ = { N | n = k*2t ,3k + 1 = p, p = k’*2t’,3k’ + 1 = 2m , 6 X m - 1 ,k, k’, m, t,t’ ∈Z+ }

    其实,这里的P’的定义还存在漏洞。因为85∈P,3 * 28 + 1 = 85,但根据猜想的定义,28是不会执行M操作的,所以需要把k是偶数的情况去掉。

    哪些情况下,k会是偶数呢?同样的道理,P中会不会出现有偶数的情况呢?

    首先回答,P中是否有偶数这个问题。下面的定理不仅证明了P中不可能有偶数,而且还直接给出了P的真身。

    定理1 : 整数集R = { N | 3k + 1 = 2m , k,m,t ∈Z+ ,2|m - 1 },则R中的元素为以1为首项,公比为4,长度为n的等比数列之和S(4)n,即R= {S(4)n| S(4)n = (4n – 1) / 3 ,n ∈Z+}

    证明:k = 2m – 1 / 3, 前文已经知道了2m – 1实际是以1为首项,公比为2,长度为m - 1的等比数列之和。即k = (1 + 2 + 22 + 23 + … + 2m - 2) / 3

    将等比数列中相邻的两项两两归并,即得

    K = (3 * 1 + 3 * 22 + … + 3 * 2m-3)/3 = 1 + 22 + 24 + … + 2m-3

    根据等比数列的性质有:an+1 = q * an ,则an + 2 = q * an + 1 = q2 * an。若重新构造一个数列A使其中每项相差一项,则数列A必然也是一个等比数列,且公比为q2。

    命题得证。

    至此第一层倒推集的真身终于大白了。它只不过是首为1,公比为4的等比数列,长度为n的和组成的整数集,而且从求和式中容易得知,这个整数集不可能存在偶数。

    举例,k = 5 = 24 – 1 / 3 = S(4)2 = 1 + 4

    k = 21 = 26 – 1 / 3 = S(4)3 = 1 + 4 + 16,

    k = 85 = 28 – 1 / 3 =S(4)4 = 1 + 4 + 16 + 64

    重新定义第一层倒推层 P = { N | n =2t*k ,k = (4^m – 1) / 3, m, t ∈Z+}

     

    2-1-1 第二层倒推

    得到这个重要的结论,就可以继续倒推第二层。

    继续来考察k值,由前面得知要实现倒推要满足两个条件:

    (1) n = 1 (mod 3)

    (2) (n – 1) / 3 = 1 (mod 2)

    简化一下2式得:

    (1) n = 1 (mod 3)

    (2) n = 0 (mod 2)

     

    使用中国剩余定理解此同余方程组。得:

    n的特解为n = 1 * 2 * 2 + 0 * 3 * 0 = 4 ,通解为N= 4 + 6n 即N = 4 (mod 6)

    这给出一个数能逆推的必要条件:模6余4。

    因为4m = 4(mod 6),可知 4m - 1 = 3 (mod 6) 。后面的运算应用到同余除法定理:

    同余除法定理1: a = c (mod p) , b|a ,令 a / b = d (mod p) ,则d 是同余方程bX = c (mod p)的解。

    证明:设 a = b * e = c  (mod p) , 所以 b * e = pt + c ,又e =d (mod p ) ,e = pt’ + d ,代入得 b * (p t’ + d ) = pt + c ,移项得b * d = p * (t – bt’) + c 。即d 是同余方程b X = c (mod p)的解

     

    由同余方程3x = 3 (mod 6),得x = 1 + 2t。所以k= (4m - 1) / 3 = 1 (mod 6) ,或者k = 3 (mod 6),或者k = 5 (mod 6)。

    在这三种情况里,可以确定k = 3(mod 6)的情况是无法进行逆推,因为 当t > 1时,k * 2t = 0 (mod 6)。

    下面分别讨论这两种情况。

    k = 1 (mod 6)当m = 3时,有k = S3 = 1 + 4 + 16 = 21 =3 (mod 6)。

    又因为不管n取何值,4n = 4(mod 6),所以可以推知当m = 4 + 3t时,k = 1 (mod 6)。

    因为4k = 4(mod6) ,由此得到第二层逆推公式 k'= (42w * (43t+4 - 1) / 3 - 1) / 3 = (43t + 5 - 7) / 9

    k = 5 (mod 6): 当 m = 2 时,有k = S2 = 1 + 4 = 5 (mod 6),因此,当m = 2 + 3t时,k = 5 (mod 6)。

    由2k = 4(mod6) , 这时又得到第二个逆推公式k' = (2 * (43t+2 - 1) / 3 - 1) / 3 = (2 * 43t + 2 - 5) / 9。

    合并两式得 k' = (2 - d) (4n - 7) / 9 + (d - 1) (2 * 4n - 5) / 9 = d * (4n + 2) / 9 - 1 , n = d (mod 3)

     

    即得P'' = {N|N = k*2t, k= d * (4n + 2) / 9 - 1 , d =1或2, n=3m + d, n > 1 , d > 0,n, m, t ∈Z+}

    2-1-3 第三层倒推

    下面继续尝试进行第三次倒推,为了描述的方便,下文将使用符号P(N)来代表进行第N次倒推。现在需要对d的两种不同取值分别进行讨论

    d = 1 : 4^n - 7  = 3 (mod 6) 由 9X = 3 (mod 6),得 X = 2t + 1 。所以k = 4^n - 7 / 9 = 1(mod 6), k =5(mod 6)(去掉 k = 3(mod 6)不能逆推的情况,下同)。存在逆推的可能。

    下面讨论当n取何值时

    k = 1(mod 6) : 由同余式得( 4^n - 7 ) / 9 = 6y + 1 ,得4^n = 54y + 16 ,即得同余方程:

    4x = 16(mod 54),可轻松得到x = 2 。下面来讨论4^x = 16(mod 54)的周期。

    由4^x = 16(mod 54) 可得 4^x – 1 – 15 = 54 y ,两边同时除以3得:(4^x – 1) / 3 – 5 = 18y (1)

    (4^x – 1) / 3 恰好正是等比数列S(4)的求和式,而5也刚好是S(4)2 = 1 + 4 = 5。

    所以(1)式左边恰好是以16为首项,4为公比的等比数列的求和式S(4)4-2。

    现在来讨论求和式S(4-2)什么时候能够被18整除。

    因为S(4-2)3 = 16 + 64 + 256 = 336 =30(mod 18) = 6 * 5 ,下面将介绍等比数列和的一个重要性质,这将有助于更快找到满足条件的S。

    定理2(等比数列和递推定理):S(q)n为一个以1为首项,q为公比的等比数列的n项求和式,若有整数p < n , p | n,则有递推式 S(q)n = S(q)p * S(q^p)t , t = n / p

    证明 : 令前p项的数列和为S(q - k)p , 根据数列和的定义有: S(q)n = S(q)p + q^p + q^p+1 + q^p+2 + …。将连加项进行 pp 配对,即得 S(q-k)n = S(q - k)p + q^p * (1 + q + q^3 + ... + q^p) + ….。

    因为 p | n,所以右式的求和项可以分成t 对,且这t都可以释出一个S(q - k)p 因子,因此

    S(q)n = S(q)p * ( 1 + qp + q2p + q3p + ….. + qt) 右式的右边部分刚好又是一个以1为首,公比qp的数列和,即得结论S(q)n = S(q)p * S(q^p)t。

    定理2表明可以使用递推的形式来计算Sn,而不需要频繁计算高次冥,简化计算。

    如由定理2得S(4-2)6 = S(4-2)3 * S(64-2)2 = 336 * (1 + 64) = 21840 = 6(mod 18)。

    S(4-2)9 = S(4-2)3 * S(64-2)3 = 336 * (1 + 64 + 3904) = 336 * 3999 = 6 * 113 * 3 * 1333 = 0(mod 18)。

     

    现在找到了能被18整除的S(4-2)9 ,那么对于所有S(4-2)n 来说,使用前面使用过的方法(下文称之为数列分析法AA),将求和项9个一组的进行合并,就必然有当9 | n时,18 | S(4-2)n。

    因此方程(4x – 1) / 3 – 5 = 18y的通解为 x = 2 + 9t。

    更一般化地,有以下结论

    定理3(数列分析法): a ^ x = c (mod b) , 若 a – 1 | c -1 , a -1 | b,令d = c - 1 / a -1, e = b / (a - 1)若d = S(q)k , 且 e | S(q-k)p ,则x = k + pt 是同余方程a^x = c (mod b)的通解。

    证明:将同余方程化为等式 (a^x - 1) / (a – 1)  - d = e * y

    等式左边即为A(a)n的和减去d,又因为d是An 的前k项,所以等式左边实际为S(a-k)n

    又因为e | S(q-k)p , 根据定理2必然有e | S(q-k)p * t , t > 1。

    因此当x = k + p * t必然有等式成立,即x = k + pt 是同余方程的解。

     

    现在已经得到结论,当d = 1,n = 2 + 9t时,k = 1(mod 6)即 n满足下述同余方程组时,n可以继续进行逆推: n = 1 (mod 3), n = 2 (mod 9),由此同余方程组得到不定方程9x + 3y = 1,( 9,3) = 3 , 3 不整除1 ,显然没有整数解。

     

    K = 5(mod 6) : 移项合并整理得4x = 54 y + 52 ,即4x = 52(mod 54),由上面的计算我们已经知道4x = C (mod 54),C是一个以9为周期的值,分别计算4的0~9次方取54的余得:

    4 ^ 0 = 1 (mod 54)

    4 ^ 1 = 4 (mod 54)

    4 ^ 2 = 16 (mod 54)

    4 ^ 3 = 10 (mod 54)

    4 ^ 4 = 40 (mod 54)

    4 ^ 5 = 52 (mod 54)

    4 ^ 6 = 46 (mod 54)

    4 ^ 7 = 22 (mod 54)

    4 ^ 8 = 34 (mod 54)

    4 ^ 9 = 28 (mod 54)

    由此得到当  x = 5 + 9t时,方程有解。由此又得到同余方程组 n = 1 (mod 3) ,n = 5 (mod 9),最后得到了不定方程 9x + 3y = 4,此不定方程还是没有解。

     

    至此,d =1 的情况已经讨论完毕,并得出结论,此分支是不存在倒推数的。

     

    d = 2 :  2 * 4 ^ n - 5  = 3 (mod 6) , k = 2 * 4 ^ n - 5 / 9 = 1 (mod6)或k = 5(mod 6)

    k = 1 (mod 6) : 整理得2 * 4 ^ n = 14 (mod 54), 由2x = 14 (mod 54)得 x = 7 + 27t,所以4 ^ n = 7(mod 54) , 4 ^ n = 34(mod 54),由于4与54有公因子2,排除掉4n = 7(mod 54),即4 ^ n = 34 (mod 54)

    n = 8 + 9t 。即 n = 2 (mod 3), n = 8 (mod 9),得不定方程3x + 9y = 6,由(3, 9) = 3, 3 | 6,此方程有解。且n = 8 + 9t 。

    所以第3层倒推层通式 k’ = (4 * k – 1 ) / 3 =( 8 * 4 ^ n – 29) / 27 , n = 8 (mod 9 )

    例子: n = 8 , k’ = (8 * 65536 – 29) / 27 = 19417 。 19417 * 3 + 1 = 58252 , 58252 / 4 = 14563 , 14563 * 3 + 1 = 43690, 43690 / 2 = 21845 , 21845 * 3 + 1 = 65536 = 28

     

    k = 5 (mod 6) : 整理得2 * 4 ^ n = 50(mod 54), 由2x = 50(mod 54)得 x =25 + 27t,所以4 ^ n = 25(mod 54) , 4 ^ n = 52(mod 54),排除掉4 ^ n = 25(mod 54),即4 ^ n = 52 (mod 54)

    n = 5 + 9t 。即 n = 2 (mod 3), n = 5 (mod 9),得不定方程3x + 9y = 3,由(3, 9) = 3, 3 | 3,此方程有解。且n = 5 + 9t 。

    第3层倒推层通式 k’ = (2 * k – 1 ) / 3 =( 4 * 4 ^ n – 19) / 27 , n = 5 (mod 9 )

    例子: n = 5 , k’ = (4 * 1024 – 19) / 27 = 151 。 151 * 3 + 1 = 454 , 454 / 2 = 227 , 227 * 3 + 1 = 682 , 682 / 2 = 341 , 341 * 3 + 1 = 1024 = 2 ^ 5

     

    合并两式得k’ = ((d - 5) / 3) * (( 8 * 4 ^ n – 29) / 27) + ((8 – d)/3) * (( 4 * 4 ^ n – 19) / 27) , n = d (mod 9)

    重新归并一下可得到:k’ = ((4 * 4 ^ n - 10) * d – 8 * 4 ^ n - 7 ) / 81,

    验算:n = 5 , d = 5代入得, 代入得 k’ = ((4 * 1024 - 10) * 5 – 8 * 1024 - 7) / 81 = 151

     

    更多数据读者可以自行验算。

    由此k值公式,可得到第三层倒推层的完整数学定义。

    P'' = {N|N = k*2t, k= ((4 * 4n - 10) * d – 8 * 4n - 7 ) / 81 , d=5或8,n=9m+d , n > 1 , d > 0,m, t ∈Z+}

    2-2 关于前三层倒推数的分布

    前面我们已成功倒推了3层,分别为:

    P = { N | n =2t*k ,k = (4^m – 1) / 3, m, t ∈Z+}

    P' = {N|N = k*2t, k= d * (4 ^ n + 2) / 9 - 1 , d =1或2,n=3m + d , n > 1 , d > 0,n, m, t ∈Z+}

    P'' = {N|N = k*2t, k= ((4 * 4 ^ n - 10) * d – 8 * 4n - 7 ) / 81 , d=5或8,n=9m+d , n > 1 , d > 0,m, t ∈Z+}

    因为篇幅有效,这里不再进行倒推。现在我们来讨论这三个整数集,倒底占全体整数的多大比例。如果能证明这些整数集的比例之和等于1,那就相当于证明了猜想。

    下面的问题变成了如何求P,P’,P’’的比例。

    下面引入一种变换,可以关于数集的占比讨论变得相对简单。

    定义1: 定义自然数数集 P={p| p∈Z+}如果有变换Ф使数集P’={q|q=Ф(p), p∈P}中的任意一个整数q与它相邻的整数q ‘的距离等于P中对应两相邻数的距离,那么则称Ф为对等变换。P’称之为其关于Ф的变换集。

    举例:数集{P|P = n,n∈ Z }关于变换Ф(n) = n + 1是对等的。这是因为P中相领两数的距离d = (n + 1) – n = 1 ,这样对于P’来说,相邻两数的距离d =Ф(n + 1) -Ф(n) = ((n + 1) + 1) – (n + 1) = 1。D相等,这两个数集是对等的。

    一般来说,变换Ф(n) = n + c 都是对等的。

    定理4 : 变换Ф(n) = n + c,c∈Z 是对于任意整数集P来说是对等的,即R=1。

    证明 :设ΔP = P’ – P,则ΔQ =Ф(p’) -Ф(p) = p’+ c – (p + c) = p’–p=ΔP

    根据定义1,变换Ф(n)对于P来说是对等变换。

    定理4背后的含义是说对数轴进行左右平移,每个元素之间的距离不变。

     

    定义2:若 R 为数集P’中元素的个数与自然数集N中元素个数之间的比值。则称R为P的密度。

     

    定理5:若数集P’是P经平移变换Ф(n) = n + c变换得到的整数集,则P’的密度为与P的密度相等。

     

    而对于变换Ф(n) = a * n + c,有以下定理。

    定理5 : 变换Ф(n) = a * n + c ,a,c∈Z,则有:

    1. 变换集P’仍然包含于P,那么P’中元素的个数为原来数集元素个数的 1 / a 倍 ,即R = 1/a。
    2. 若变换集P’不与变换集P相交,则R = 1

    证明: (1)设ΔP = P’–P,那么ΔQ =Ф(p’)-Ф(p)=a * p’-c–(a * p - c) = a * ΔP.

    因为q=Ф(n)属于P,也就是说q与q’之间还有a – 1个元素是属于P,但不属于P’的。将P平均分成 (P+ΔP,P + a * ΔP)的多段与 P’进行比较,则对于当前分段的元素有

    Np’ / Np  =  1 / a。这样则对于总长度而言必有 lim R = lim (a * Np’+ c)/ a * Np=1/a,c为不大于a的常数。

    由此可得到结论变换Ф(n) = a * n + c会令原来的P缩小a倍。

    (2)(反证法)

    因为P与P’不相交,P中的元素通过影射Ф(n)必须会与P’有中的一个元素对应。现在假设R ≠ 1。则P中的元素少于P’,或P’的元素少于P。

    假设P的元素少于P’的情况。则根据题设,必然存在p,q∈P,k≠q,使Ф(p)= Ф(q),由Ф(n) = a * n + c,可得a * p + c = a * q + c ,由四则运行法则得p = q,这与假设矛盾.所以P中的元素不少于P’的元素。

    现在假设P’的元素少于P,设反函数Ф-1(n)= (n –c) / a 。则根据假设,必然有p,q∈P’,k≠q,使Ф-1(p)= Ф-1(q)。但根据四则运算法则,还是会导出p=q的矛盾结论。

    所以P与P’的元素一样多,即R=1。

     

    现在再来讨论一种更复杂的变换Ф(n) = an。

    定理6 : 变换Ф(n) = a^n ,a∈Z,若变换集P’是自然数集P关于Ф(n)的变换,那么P’与P个数的比例R=(n + 1)/ an。

    证明:由变换Ф(n)的定义,可以很轻松地知道经过变换的自然数是一个等比数列。由等比数列的通过可以得到ΔQ=an – an-1。这样P’中每两个整数之间就相差了ΔQ – 1个整数。

    若只考虑(0, Ф(n))之间的子集,则P’比P少了Sn = ∑ΔQ = ∑(an - an-1 – 1) = an - 1 – n + 2,则P’/ P = 1 – (an  – n + 1) / an = (n + 1) / an 。

    若考虑(0,t)之间的子集, Ф(n)>t >Ф(n),则当n 足够大时有P’/ P= lim (n + 1 - t)/ an + t ,当n 足够大时,n + t≈n,an + t≈t。因此P’/P ≈ (n + 1)/ an。

     

    举例,变换集P’= {P|p = 2n, n Z+ },P’={1,2,4,8,16……},考虑(0,16)之间的数有:

    P’/ P = (4 + 1)/24 = 5 / 16

    更多的数据请读者自行验证。

    下面我们就来计算K = {k|k= (4m – 1) / 3}的密度R。

    首先由P(m)= 4m ,由定理6可知其密度Rp = (n + 1) / 4n  。

    令Q(n)= P(m) – 1,由定理4有Rq = n / 4n。

    最后令K(n)=Q(n)/3 ,即Q(n) = 3 * K(n)

    现在来考察不定方程4z – 1 = 4y  - 1 / 3,x,y>0是否有解。

    移项得3 * 4z - 4y = 2。

    若x < y ,即右式必然为负数,不等式不成立。

    若 x = y 则有2 * 4x = 2 , x = 0,与假设矛质。

    若x > y,则 3 * 4z – 4y>= 11 * 4y >= 11 > 2,因此方程没有解。

    因此K(n)与Q(n)不相交。由定理5知Q(n)的密度等于K(n),即Rk = n / 4 ^ n 。

    验证:考虑(0,64)之间的数有R= 3 / 43 = 3 / 64, k = (1,5,21)。

    现在考虑N = 2t * k 。从数列的角度来考虑,N组成了以k 为首的等比数列集

    1,2,4,8,16,…..

    5,10,20,40,…….

    21,42,84,…….

     

    若只考虑区间(0,4n),则可以通过 2t * k < 4n 来判定t 的取值. t <= log2 (4n / k).

    如当n = 4 , k = (1,5,21,85) ,t1 <= log2 256 = 8, t2 < log2 (256 / 5) ≈ 5,t3 < log2 (256 / 21) = 3,t4 < log2 (256 / 85) ≈ 1,那么N在(0,256)的密度R = (4 + (8 + 5 + 3 + 1 )) / 256= 21 / 256,大概只有1 / 10不到的密度。而且密度随着n增大,密度呈现指数级下降

    对于nZ+,来说R = ( n + ∑log2 (4n / k ) ) / 4 ^ n

    4、关于猜想的一些副产品

    猜想的证明目前进展到这里,虽然离完全证明冰雹猜想还有着一大段距离,但至少现在是打开了一个缺口。现在已经证明了有无穷个自然数满足冰雹猜想,证明的过程中,不仅得到了精确的数学表达式,还对其分布密度进行了准确的分析。虽然结果表明,这种分布是极其稀疏的。但是,我相信随着反推法和数列分析法的进一步运用,还有更多的通式可以被准确推导出来。得到了通式,就可以进一步分析其密度。如果在分析这些密度的过程中,能分析出其中的规律,得到一个更一般化的密度公式,那么离完全证明猜想也就不远了。

    以上就是对完全证明冰雹猜想的想法的思路,欢迎各位喜爱数学研究的同好加入到猜想的证明中来。猜想本身貌似没有多少意义,但在证明的过程中,相信一定会发现很多数学上的有用的工具和规律,例如,上文中提到的数列分析法,密度分析法。还有4 ^ n = 4 (mod 6),不管自然数n取何值等式恒成立。

    下面介绍一个更一般化的定理:

    定理7 : a ^ n = a (mod p) , a > 1 , 令q = a * (a - 1),  当 p > a 且有p | q 时,等式恒成立。

    在证明该定理前,先证明一个引理:

    引理 7 : 若a = a ^ 2 = a (mod p ),则 a ^ n = a (mod p)恒成立。

    证明:使用数学归纳法

    现假设a ^ k = a (mod p),则 a ^ (k + 1) = ( a ^ k ) * a  ,由题设可知 a ^ (k + 1) = a ^ 2 (mod p ) = a (mod p)

    因此a ^  (k  + 1 ) = a ^ k = a (mod p),证毕。

    下面开始证明定理7。

    证明:由引理7知道,只需要证明 a = a ^ 2 = a (mod p)就足够了。

    由 a = a (mod p),可知当p > a 时,a 自身就是模p 的最小正剩余。

    由 a ^ 2 = a (mod p),可以得到等价形式 a ( a - 1 ) = p t,由等式轻易可以知道,若 p | q时同余式一定成立。

    综合上述两点,可知结论成立。

    举例 16 = 16 (mod 20) ,  20 | 16 * 15 , 所以16 ^ 2 = 256  = 20 * 120 + 16 = 16 (mod 20)

    这个定理十分好玩,它证明了自然数界里面所有的数不管自乘多少次,总会找到一个模p,使取模后的余永远相等。

    展开全文
  • 取n=19,我们得到如下一串数字: 19->58->29->88->44->22->11->34->17->52->26->13->40->20->10->5->16->8->4->2->1-> 今天我们借助于计算机程序,对于2^60以下的正整数,collatz猜想都是正确的。有些数字需要经历很...

    任意取一个正整数n,如果n是一个偶数,则除以2得到n/2;

    如果n是一个奇数,则乘以3加1得到3n+1,重复以上操作,我们将得到一串数字。

    例如,取一个正整数n=3,3是奇数,得到3*3+1=10,10是偶数,得到10/2=5。重复上述操作,我们将得到一串数字:

    3->10->5->16->8->4->2->1->

    继续从1开始操作,我们得到1->4->2->1,再次回到了1。

    从而将出现了1->4->2->1的循环。

    因此Collatz猜想:任何正整数n参照以上规则,都将回归1.

    我们再看一个例子。取n=19,我们得到如下一串数字:

    19->58->29->88->44->22->11->34->17->52->26->13->40->20->10->5->16->8->4->2->1->

    今天我们借助于计算机程序,对于2^60以下的正整数,collatz猜想都是正确的。有些数字需要经历很长的路才会回归1,例如n=27,需要经历111步:

    27->82->41->124->62->31->94->47->142->71->214->107->322->161->484->242->121->364->182->91->274->137->412->206->103->310->155->466->233->700->350->175->526->263->790->395->1186->593->1780->890->445->1336->668->334->167->502->251->754->377->1132->566->283->850->425->1276->638->319->958->479->1438->719->2158->1079->3238->1619->4858->2429->7288->3644->1822->911->2734->1367->4102->2051->6154->3077->9232->4616->2308->1154->577->1732->866->433->1300->650->325->976->488->244->122->61->184->92->46->23->70->35->106->53->160->80->40->20->10->5->16->8->4->2->1->

    The number of steps of 27 is 111. 在回归1的途中,最大值为9232.

    今天Collatz猜想(也称为3n+1问题或冰雹猜想)仍未得到解决,3n+1问题是培养数字敏感性和探索数字世界奥秘的好问题,同时也是练习程序思维的好问题。

    附Python程序代码

    def c(n):

    def rule(n):

    if n==1:

    return 1

    elif n%2==0:

    return n//2

    else:

    return 3*n+1

    s=0

    print(n,end='->')

    i=n

    while i!=1:

    i=rule(i)

    s=s+1

    print(i,end="->")

    print('\n The number of steps of {} is {}.'.format(n,s))

    执行此代码,例如输入c(10)得到如下结果:

    展开全文
  • R中的Collatz猜想

    2021-01-14 08:30:13
    在下面是R中Collatz序列的一个实现:f {# construct the entire Collatz path starting from nif (n==1) return(1)if (n %% 2 == 0) return(c(n, f(n/2)))return(c(n, f(3*n + 1)))}打电话给f(13)我明白了13、40、20...

    我仍然在教我自己(和我的学生)。在

    下面是R中Collatz序列的一个实现:f

    {

    # construct the entire Collatz path starting from n

    if (n==1) return(1)

    if (n %% 2 == 0) return(c(n, f(n/2)))

    return(c(n, f(3*n + 1)))

    }

    打电话给f(13)我明白了

    13、40、20、10、5、16、8、4、2、1

    但是请注意,向量的大小在这里是动态增长的。这种做法往往会导致代码效率低下。有没有更有效的版本?在

    在Python中我会使用

    ^{pr2}$

    我找到了一种不用事先指定向量维数就可以写入向量的方法。因此,解决方案可以是collatz

    {

    stopifnot(n >= 1)

    # define a vector without specifying the length

    x = c()

    i = 1

    while (n > 1)

    {

    x[i] = n

    i = i + 1

    n = ifelse(n %% 2, 3*n + 1, n/2)

    }

    x[i] = 1

    # now "cut" the vector

    dim(x) = c(i)

    return(x)

    }

    展开全文
  • Collatz猜想 (3n+1猜想) 这是是一个著名的数学问题,至今没有证明其正确性,也没证明其是错误的,即任何一个正整数N,如果是偶数的话就除以2,如果是奇数的话就乘以3再加上1,最后这个数都会变为1。 公式如下: ...
  • Python一个小程序—collatz猜想 描述:任意写出一个正整数N,并且按照以下的规律进行变换: 如果是个奇数,则下一步变成3N+1。 如果是个偶数,则下一步变成N/2。 经过多次循环,结果一定为1。 def collatz(number)...
  • python逆Collatz猜想

    2021-02-09 01:41:13
    基线:IsaacRule(50, 2)需要6.96秒0)使用LRU缓存这使得代码花费更长的时间,并给出了不同的最终结果1)消除中频条件:(number * 2) % 2 == 0到True艾萨克鲁勒(50,2)需要0.679秒。谢谢你的PM2。2)简化((number - 1) / 3) ...
  • Collatz 猜想和 Python

    2020-12-06 02:44:28
    Python Day 4: Collatz Conjecture原来总有学生问我,微积分有什么用啊, 我说如果微积分学好了,也许抽象代数和数论就能学好,那最后就能像Andrew Wiles 一样上 人物 年度杂志的封面了. (Andrew Wiles 证明了Fermat...
  • 当然2万亿远低于这个数字2**53浮子精度的极限,但是从N开始的Collatz序列,经常比N高很多,2万亿左右的许多数字有超过N的序列,这一点都不令人难以置信,而下面的数字很少。甚至有可能从2万亿开始的一长串数字经过2**53个...
  • 引言 Collatz 猜想,又称为 3x 1 猜想,冰雹猜想,角谷猜想,哈塞猜想,乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘 3 再加 1,如果它是偶数,则对它除以 2, 如此循环,最终都能够得到 1....
  • 循环和Collatz猜想

    2020-12-10 09:03:55
    目前我正在做一个关于Collatz猜想的程序,该程序应该检查从一定数量的Collatz序列到一个最大步骤是什么。我的代码是:start_num = int(input("insert a starting Number > "))how_many = int(input("how many ...
  • 请问怎么样实现以上的程序,在线等。
  • def collatz(num): if num % 2 == 0 : return num//2 elif num % 2 == 1: return 3*num + 1 else: print('error') try: num = int(input()) while num!=1: pr...
  • Collatz循环结构

    2021-01-29 01:42:02
    问题是The Collatz SequenceWrite a function named collatz() that has one parameter named number. If number is even, then collatz() should print number // 2 and return this value. If number is...
  • /*** 考拉兹猜想:Collatz Conjecture* 又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,* 是指对于每一个正整数,如果它是奇数,则对它乘3再加1,* 如果它是偶数,则对它除以2,如此循环,...
  • Python Collatz序列实现过程解析编写一个名为 collatz()的函数,它有一个名为 number 的参数。如果参数是偶数,那么 collatz()就打印出 number // 2, 并返回该值。如果 number 是奇数, collatz()就打印并返回 3 * ...
  • Python实现Collatz序列(考拉兹猜想)

    千次阅读 2018-04-07 14:01:00
    考拉兹猜想(英语:Collatz conjecture),又称为奇偶归一猜想、3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它...
  • 老师布置的一个小作业–用python代码实现角谷猜想,我用python实现,下面就给大家提供一个思路,供大家参考。 ''' 角谷猜想: n 是一个自然数 如果 n 是奇数,则 n = 3 * n + 1 如果 n 是偶数,则 n = n / 2 当 n = ...
  • Collatz 序列 (考兹特猜想

    千次阅读 2018-07-09 17:53:48
    # It is a practice. def collatz(num): if num % 2 == 0 : return num//2 elif num % 2 == 1: return 3*num + 1 else: print('error')try: num = int(input()) while ...
  • 编写一个名为的函数collatz(),它有一个名为的参数number。如果number是偶数,那么collatz()应该打印number // 2并返回这个值。如果number是奇数,collatz()则应打印并返回3 * number + 1。 然后编写一个程序,让...
  • 操作系统概念 实验二-进程控制

    千次阅读 2020-10-12 19:49:41
    年轻人要讲抄德,抄袭作业又蠢又坏,大家耗子尾汁 实验二-进程控制 实验内容一、 要求 解决方案 运行结果 实验内容二、 要求 解决方案 实验内容三、 要求 解决方案 Collatz 猜想:任意写出一个正整数 N,并且按照...
  • 这条线:n = int(n/2)…将n转换为一个float,将该float除以2,...在当然,对于浮点精度来说,2万亿远远低于2**53的限制,但是从N开始的Collatz序列经常比N高出很多。在2万亿左右的许多数字都有超过2**53的序列,而低...
  • 考拉兹猜想(Python版)

    千次阅读 2019-08-06 23:42:18
    考拉兹猜想Collatz Conjecture),也叫奇偶归一猜想、3n + 1猜想、冰雹猜想、角骨猜想、哈塞猜想、乌拉姆猜想、叙拉古猜想 算法介绍: 对于每一个正整数,如果他是奇数,就对他乘以3,再加1,如果是偶数则对他...
  • 操作系统进程控制模拟实验报告及源码.rar
  • 考拉兹猜想(英语:Collatz conjecture),是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。(摘自Wiki)首先编写一个collatz()函数判定参数(number)奇偶,...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 351
精华内容 140
关键字:

collatz猜想