歌德巴赫猜想,EOJ 2877

歌德巴赫猜想,EOJ 2877

歌德巴赫猜想

Time Limit:4000MS Memory Limit:65536KB


Description

歌德巴赫猜想,是指对于每一个大于4的偶数n,都能表示成两个质数之和。
现在,你需要写程序验证这一猜想。对于n,找出质数a和b, 满足a+b=n, a≤b,且a*b最大。例如n=8,满足条件的a和b分别为3和5;
又如n=10,质数3、7以及5、5满足a+b=n, a≤b,而乘积大的那组是5、5。

Input

每行一个偶数n(4 < n <= 20000)

Output

对应于每个输入的偶数,输出a、一个空格、b、一个换行符

Sample Input

8
10
1000

Sample Output

3 5
5 5
491 509

Source

09级10级编程能力测试1



素数筛法,重要不等式

 1  #include  < stdio.h >
 2  #include  < string .h >
 3 
 4  #define   L  20009
 5 
 6  int  prime[ L ];
 7 
 8  void  initPrime() {
 9           int  i, j;
10          memset( prime,  0xff sizeof (prime) );
11          prime[  0  ]  =  prime[  1  ]  =   0 ;
12           for  ( i  =   2 ; i  <  L;  ++ i ) {
13                   if  ( prime[ i ] ) {
14                           for  ( j  =  i + i; j  <  L; j  +=  i ) {
15                                  prime[ j ]  =   0 ;
16                          }
17                  }
18          }
19  }
20 
21  int  main() {
22           int  n, a, b;
23          initPrime();
24           while  ( scanf(  " %d " & n )  ==   1  ) {
25                  a  =  b  =  n  /   2 ;
26                   while  ( (prime[a] == 0 ||  (prime[b] == 0 ) ) {
27                           -- a;
28                           ++ b;
29                  }
30                  printf(  " %d %d\n " , a, b );
31          }
32           return   0 ;
33  }
34 


你可能感兴趣的:(歌德巴赫猜想,EOJ 2877)