APP下载

趣味数学

2021-07-15陈新龙

电脑报 2021年19期
关键词:奇数偶数冰雹

陈新龙

冰雹猜想虽然运算规则简单,但这个谜题至今都没能被证明出来。冰雹猜想规则很简单,任意写出一个(非零)自然数N,并且按照规律进行变换:如果是个奇数,则下一步变成 3N+1;如果是个偶数,则下一步变成 N/2,数列最终都会回到1。在45年前这个数学游戏刚刚出现时学生、教师、教授,甚至是一等一的数学大咖都纷纷加入这个看似简单的数学游戏,人们取了各种各样的数字N去检验这个算法,最终都无一例外地坠入自然数序列4→2→1。于是就自然萌生出这样的猜想:对于任意非零自然数N,经上述变换最终都将落入4→2→1序列的宿命。这就是“冰雹猜想”或称“角谷猜想”。根据数学家的研究任何小于7×1011的所有的正整数,都符合这个规律。

例如输入自然数N=6。6是偶数,要先除以2,6÷2=3;3是奇数,要将它乘3之后再加1,3×3+1=10;按照上述法则继续往下做:10÷2=5,5×3+1=16,16÷2=8,8÷2=4,4÷2=2,2÷2=1。从6开始经历了3→10→5→16→8→4→2→1,最后得到1。其实冰雹猜想最大的魅力在于其不可预知性,数字转化过程变化莫测,有时候平缓温和,有时候剧烈浮沉,无一例外都会坠入4→2→1的谷底,好比是一个数学黑洞,将所有的自然数牢牢吸住(图1)。

27的歸一要经过剧烈波动

由于这个猜想计算简单但需要重复多次计算,用程序来计算更加合适,看看我们给出的数字最后是否归一,我们选择Scratch和C语言分别进行编写。通过两种语言使用相同的算法让大家从图形化编程转向纯代码编程,提高编程能力(图2)。

首先用户输入一个数字,设置两个变量,一个变量记录用户输入的数字,变量“步数”记录完成归一的变化次数。由于该猜想认为输入任何数字最后的结果都等于1,所以循环中止条件为数字等于0或等于1时,跳出循环。循环中有两个条件,当数字是奇数时,将数字×3+1,输出到列表中;如果数字是偶数,将数字/2,输出到列表中(图3)。

我们将Scratch中使用的算法用到C语言中,首先scanf输入一个非零整数,然后添加一个while循环,在循环中进行判断,数字为奇数时乘3加1,数字为偶数时除以2,直到最后数字等于1时结束循环。输出每次运行后的值。

#include

int main()

{

int N, i = 0, j = 0;

printf("请输入一个非0整数:");

scanf("%d",&N);

while( N != 0 && N !=1 )

{

if (N%2 == 0)

{

N = N / 2;

i++;

printf("%d--",N);

}

else if( N%2 == 1)

{

N = 3*N+1;

i++;

printf("%d--",N);

}

}

printf("结束\n此次冰雹猜想的变换次数 == %d\n",i);

return 0;

}

无需安装配置编辑环境,搜索“C在线工具”在网页上执行代码,运行结果一致(图4)。

当我们掌握C语言的语法之后,按照正确的思路就很容易编写出完整的代码,无需畏惧代码编程。

猜你喜欢

奇数偶数冰雹
冰雹是冰的,却为何出现在夏天
奇数凑20
盛夏冰雹
夏日冰雹
谈“奇数与偶数”的教学处理
抓住数的特点求解
有多少个“好数”?
奇偶性 问题