(TOJ1245)寻找素数对

描述

哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.
做好了这件实事,就能说明这个猜想是成立的.
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的,而且素数对中的第一个数不大于第二个数.

输入

输入中是一些偶整数M(5<M<=10000).

输出

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

样例输入

20

30

40

样例输出

7 13

13 17

17 23

 

 1 #include<stdio.h>

 2 #include<math.h>

 3 #include<string.h>

 4 #include<ctype.h>

 5 

 6 int isprim(int n)

 7 {

 8     int i;

 9     for(i=2; i*i<=n; i++)

10     {

11         if(n%i==0)

12           return 0;

13     }

14     return 1;

15 }

16 

17 void solve()

18 {

19     int n,i,j;

20     while(scanf("%d",&n)!=EOF)

21     {

22         for(i=n/2; i>1; i--)

23         { 

24           if(isprim(i))

25           {

26               for(j=n/2; j<n; j++)

27               {

28                   if(isprim(j))

29                   {

30                       if(i+j==n)

31                        goto lop;

32                   }

33               }

34           }

35         }

36         lop:printf("%d %d\n",i,j);

37     }

38 }

39     

40 int main()

41 {

42     solve(); 

43     return 0;

44 }

 

你可能感兴趣的:(素数)