谁能给我讲明白这段代码?
这个是在4到100之间的偶数中验证哥德巴赫猜想(即每个大于2的偶数都是两个质数和)的程序,
程序的for_k循环是4到100之间的偶数,for_a循环是看a在2到k/2之间是否有质数,使得偶数k=质数a+质数b,
因为在2到k/2之间找到的质数a与在k/2到k之间找到的质数a互相对称,比如30=7+23,30=23+7,所以for_a循环只需要在2到k/2之间循环,
这里a=2是因为2是最小的质数,所以a从2开始找质数
下面判断a是否是质数
(a==2时,虽然i==2但是i<=a-1,i<=1所以程序没有进for_i循环,直接执行if判断count1是否为0,因为count1没变,仍然为0,所以2是质数)
count1实际是一个标识a是否是质数的标识变量,初值count1==0,当a%i==0时自增1,这时count1==1表示a不是质数,break退出第一个for_i循环,
如果for_i循环中所有i都没使a%i==0,则count1没有变,仍然为0,a是质数.
(i=2是因为质数是只能被1和本身整除的数,所以如果a不能被2到a-1的数整除就是质数,i=2的2是这么来的.)
下面判断b=k-a中的b是否是质数
(b==2时,虽然i==2但是i<=b-1,i<=1所以程序没有进for_i循环,直接执行if判断count2是否为0,因为count2没变,仍然为0,所以2是质数)
count2实际是一个标识b是否是质数的标识变量,初值count2==0,当b%i==0时自增1,这时count2==1表示b不是质数,break退出第二个for_i循环,
如果for_i循环中所有i都没使b%i==0,则count2没有变,仍然为0,b是质数.
(i=2是因为质数是只能被1和本身整除的数,所以如果b不能被2到b-1的数整除就是质数,i=2的2是这么来的.)
如果a和b都为质数则打印k=a+b,退出for_a循环,继续for_k循环,判断下一个4到100的偶数可不可以拆分成两个质数的和,直到102退出for_k循环,程序结束.
(注意break语句只是退出当前for循环,程序执行当前for循环外的下一条语句,这对理解程序的流程很重要)
2022-03-17 广告