哥德巴赫猜想是指任一大于2的偶数都可以写成两个质数之和。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠,试编写程序,验证任一大于2且不超过n的偶数都能写成两个质数之和。
01
哥德巴赫猜想
01#include<iostream>
02usingnamespacestd
;

03intmain()
04
{

05constint
 SIZE=
1000
;

06int
 n,r,p[SIZE],i,j,k,ans;

07bool
 tmp;

08cin
>>n;

09
    r=
1
;

10
     p[
1
]=
2
;

11
    ans=
0
;

12for
(i=
3
;i<=n;i++){

13
         ① ;

14for
(j=
1
;j<=r;j++)

15if
(i% ② ==
0
){

16
        tmp=
false
;

17break
;

18
      }

19if
(tmp){

20
        r++;

21
           ③ ;

22
      }

23
    }

24for
(i=
2
;i<=n/
2
;i++){

25
      tmp=
false
;

26for
(j=
1
;j<=r;j++)

27for
(k=j;k<=r;k++)

28if
(i+i== ④ ){

29
          tmp=
true
;

30break
;

31
        }

32if
(tmp)

33
      ans++;

34
    }

35cout
<<ans<<
endl
;

36return0
;

37
   }
若输入n=2010,则输出   ⑤   时表示验证成功,即大于2且不超过2010的偶数都满足哥德巴赫猜想。
1) ①处应填(  )
A.k=0
B.p[i]=i
C.tmp=true
D.p[i]=r
2) ②处应填(  )
A.p[j]
B.p[n]
C.n
D.j
3) ③处应填(  )
A.p[r]=i
B.p[j]=i
C.tmp=true
D.ans++
4)  ④处应填(  )
A.j+k
B.p[j]+p[k]
C.p[j]
D.p[k]
5) ⑤处应填(  )
A.2010
B.1005
C.2009
D.1004
【分析】
本题是对“哥德巴赫猜想”进行验算的程序。输入n后,将2至n的所有素数都放入数组p中,每两个素数两两相加,并在2~n中寻找与结果相等的偶数,若找到,说明这两个素数相加起来为偶数,符合哥德巴赫猜想,结果ans加1;若没找到,ans不变。
填空题1解析:
tmp是一个判定标志,在每次循环的开始被设定成“true”,若经过判断,i不是素数时,则变为false。
参考答案:C
填空题2解析:
利用循环,将i与数组p中的每一个素数相除,以此来判断i是否为素数。
参考答案:A
填空题3解析:
这里巧妙地把数组的下标改为r,用于存入新的素数。同时r的增加也改变了下次判定素数的循环次数。
参考答案:A
填空题4解析:
本题利用了枚举法,将所有的素数两两相加,再与2~n之间的所有偶数相比。若有相等则这个偶数符合“哥德巴赫猜想”并记在ans中;否则ans不加。
参考答案:B
填空题5解析:
要判断2-n中是否有偶数不符合“哥德巴赫”猜想,当n=2010时,此时2~n中有1005个偶数,去除一个2不算在内,所以剩下应该输出1004,表示3-2010中的1004个偶数全部符合“哥德巴赫猜想”。
参考答案:D
02
参考书籍
CCF CSP第一轮认证一本通
ISBN:978-7-302-58146-8
作者:丁向民
定价:79元
undefined
03
精彩推荐
继续阅读
阅读原文