C语言验证一下角谷猜想,冰雹猜想

今日题目分享------>>角谷猜想,又叫冰雹猜想

故事分享:1976年的一天,《华盛顿邮报》于头版头条刊登了一条数学新闻,文中叙述了这样一则故事:70年代中期,美国个所名牌大学校园内,人们都像发疯一般,日以继夜废寝忘食地玩弄一种数学游戏,这个游戏十分简单,任意写出一个(非零)自然数N,并且按照以下规律进行变换:

  • 如果是个奇数,则下一步变成 3N+1
  • 如果是个偶数,则下一步变成 N/2

一时间学生、教师、研究员、教授,甚至是一等一的数学大拿、天才都纷纷加入这个看似简单的数学游戏,人们取了各种各样的数字N去检验这个算法,最终都无一例外地坠入自然数序列4-2-1,于是就自然萌生出这样的猜想:对于任意非零自然数N,经上述变换最终都将落入4-2-1序列的宿命。这就是著名的角谷猜想,或称冰雹猜想。

当时看到这里我半信半疑,莫非真的有这么神奇吗???真的随便输入任意的自然数,经过这个公式计算到最后的序列都是4 2 1吗?  带着这个疑问,我们来用代码实现,亲自验证一下!!!!

程序代码:

#include<stdio.h>
#include<stdlib.h>


//去负数绝对值的函数
int my_abs(int x)    
{
    int mask = x >> (sizeof(int) * 8 - 1);
    return (x + mask) ^ mask;
}

void ice_(int*num)
{
    if(*num>0)
    {
        while(*num != 1)
        {
            if(*num%2==0)
            {
                //输入为偶数
            *num=(*num)/2;
                printf("%d ", *num);
            }
            else
            {
                //为奇数
                *num=3*(*num)+1;
                printf("%d ", *num);
            }
        }
    }
    if(*num<0)
    {
        *num = my_abs(*num);
        // *num=(*num)^(1<<31);
        printf("%d\n", *num);
         while(*num != 1)
        {
            if(*num%2==0)
            {
                //输入位偶数
            *num=(*num)/2;
                printf("%d ", *num);
            }
            else
            {
                //为奇数
                *num=3*(*num)+1;
                printf("%d ", *num);
            }
        }

    }
  
   
}


int main()
{
    int N;
    printf("请输入一个非零自然数:");
    scanf("%d", &N);
    ice_(&N);
    printf("\n");

    return 0;
}

注意:int my_abs(int x)函数是一个 取负数绝对值的函数,使用位运算求绝对值,为了让负数也能实现一样的效果,做了一个小转换,看读者需求,加不加无所谓的,不过既然写了,就简单说一下:

这个示例代码中,我们定义了一个 my_abs() 函数来计算一个整数的绝对值。首先,我们通过右移运算符(>>)将 x 的符号位移到最右侧,得到一个掩码 mask,其值为 0 或 -1。然后,我们将 x 和 mask 相加,得到一个中间值。最后,我们将中间值和掩码 mask 进行异或运算,得到 x 的绝对值。这种方法的优点是它的效率很高,特别是在处理大量数据时。由于它不需要任何条件分支或函数调用,因此它的执行速度非常快。但是,这种方法只适用于计算整数的的绝对值,而且在计算负数的绝对值时需要进行符号位移操作,这会影响代码的可读性和可维护性(转载于C语言中文网的解释,大家感兴趣可以自己查一下哦)

实现效果:

验证效果确实如其所说,随便输入一个非零整数,到最后的运算的序列都会回到4-2-1,是不是感觉有点神奇,我也这么觉得哈哈哈哈!

其实冰雹猜想最大的魅力,在于其不可预知性,数字N的转化过程变幻莫测,有些平缓温和,有些剧烈沉浮,但却都无一例外地会坠入4-2-1的谷底,这好比是一个数学黑洞,将所有的自然数牢牢吸住。有人把冰雹路径比喻一个参天大树,下面的树根是连理枝4-2-1,而上面的枝枝叶叶则构成了一个奥妙的通路,把一切(非零)自然数统统都覆盖了,这个小学生都看得懂的问题,迄今为止却没有任何数学手段和超级计算机可以证明这是为什么!

冰雹猜想跟蝴蝶效应恰好相悖,蝴蝶效应蕴含的原理是:初始值的极小误差,会造成结果的巨大不同,而冰雹猜想恰好相反:无论刚开始存在多大的误差,最后都会自行修复,直到坠入谷底,咱也不知道,但确实很神奇!

好啦!今天的分享就到这里啦!下次再会!谢谢大家的阅读!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值