码迷,mamicode.com
首页 > 其他好文 > 详细

(题目)寻找素数对

时间:2015-10-23 08:55:50      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

           寻找素数对

              TimeLimit:1000ms  MemoryLimit:128000KB
                  64-bit integer IO format:%lld
Problem Description

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

Input

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

Output

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

SampleInput
20
30
40
SampleOutput
7 13
13 17
17 23

技术分享
 1 #include <stdio.h>
 2 int main()
 3 {
 4     int m,i,j;
 5     while ( scanf("%d",&m)!=EOF )
 6     {
 7     int num[m];
 8     for (i=0;i<m;++i)///初始化数组表
 9         num[i]=1;
10     for (i=2;i<m;++i)//建立素数表
11         for (j=2;;++j)
12     {
13         if (i*j>m)
14             break;
15         num[i*j]=0;
16     }
17     for (i=m/2;;--i)//遍历求素数对
18     {
19 
20         if (num[i]==1 && num[m-i]==1)//素数对所要满足的条件
21             break;
22     }
23     printf("%d %d\n",i,m-i);
24     }
25     return 0;
26 }
Ac Code

 

 AC思路:
1.以输入的数值m为界限,列举出素数表。(因为里m最近的素数对一定的m/2的附近)
2.以i=m/2为起始点,向前遍历,当遇到是素数是,再检查m-i是否为素数。这样可以检查出距离彼此最近的素数之和等于m的素数对。

 

另一种思路:

在Ac后查看他人的代码,发现另外一种思路。

1.仍然从m/2向前或向后遍历。

2.写个函数isprimer();检查某一数值i是否为素数,该数是,则检查对应m-i是否素数,如果是则最近的素数对就是这两个数。

 

 

思考:看完后发现其实并不需要建立素数表,因为该题因为可以只需要进行两个数的判断素数与否。这样就减轻计算工作量。



(题目)寻找素数对

标签:

原文地址:http://www.cnblogs.com/rldlfm/p/4903376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!