寻找素数对

寻找素数对

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 14   Accepted Submission(s) : 12
Problem Description
哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数. 做好了这件实事,就能说明这个猜想是成立的. 由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.
 

 

Input
输入中是一些偶整数M(5
 

Output
对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数.
 

Sample Input
20
30
40
 

Sample Output
7 13
13 17
17 23
 

Source
浙江工业大学第四届大学生程序设计竞赛
输入一个数,然后寻找两个最邻近的素数,而且,这两个素数相加的和等于这个数;所以这两个素数肯定在这个数一半的左右两边,
题目要求素数的范围不大,直接用素数筛选法找出1~10000内所以的素数。在输入的时候,只需要对输入的数的一般,开始左或右查找即可。
如果,该数的一般刚好数素数,可以直接输出两个该数字一半即可。
 1 #include <stdio.h>
 2 #define Max(a,b) a>b? a:b
 3 #define Min(a,b) a>b? b:a
 4 #include <string.h>
 5 int main()
 6 {
 7     int i,j,a[11000]={0},NUM;/*素数筛选法*/
 8     for(i=2;i<=10050;i++)
 9         a[i]=1;
10     for(i=2;i<=10050;i++)
11         if(a[i])
12             for(j=i+i;j<=10050;j+=i)
13                 a[j]=0;
14     while(scanf("%d",&NUM)!=EOF)
15     {
16         if(a[NUM/2])        /*看输入的数一般是否是素数,是的话,直接输出*/
17         {
18             printf("%d %d\n",NUM/2,NUM/2);
19             continue;
20         }
21         for(i=NUM/2,j=1;i<NUM,j<NUM/2;j++)  /*从右边开始查找,因为左右两边会是对称的,*/
22             if(a[i+j]&&a[i-j])             /*直接判断左右对称的是否都为素质,即为所请的值*/
23             {
24                 printf("%d %d\n",i-j,i+j);
25                 break;
26             }
27     }
28     return 0;
29 }
View Code

 修改:2015.6.1

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 int Pr[10010]={0};
 6 void Cread()
 7 {
 8     int i,j;
 9     for(i=1;i<=10000;i++)Pr[i]=1;
10     for(i=2;i<=10000;i++)
11     {
12         if(Pr[i])
13             for(j=2;i*j<=10000;j++)Pr[i*j]=0;
14     }
15     return ;
16 }
17 int main()
18 {
19     int N,C,X,i;
20     Cread();
21     while(scanf("%d",&N)!=EOF)
22     {
23            X=N/2;
24            for(i=0;X-i>=1;i++)
25            {
26                if(Pr[X-i]&&Pr[X+i])
27                 {
28                     printf("%d %d\n",X-i,X+i);
29                     break;
30                 }
31            }
32     }
33     return 0;
34 }
View Code
posted @ 2014-08-22 13:05  Wurq  阅读(385)  评论(0)    收藏  举报