HDU 1262 寻找素数对

来源:互联网 发布:湖人王朝时期科比数据 编辑:程序博客网 时间:2024/05/21 02:50

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1262

寻找素数对

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12687    Accepted Submission(s): 6426


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

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

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

Sample Input
20 30 40
 

Sample Output
7 1313 1717 23
题解:简单题,小技巧:2个素数必然分布在n/2两侧,同时从中间倒着来,可以很快找到最近的。

代码:

#include<iostream>  using namespace std;const int maxn = 10000 + 1;bool init[maxn];void get_init() {memset(init, true, sizeof(init));for (int i = 2;i < maxn;i++) {if (init[i]) {for (int j = i + i;j < maxn;j += i)init[j] = false;}}}int main() {get_init();int n;while (cin >> n) {for (int i = n / 2;i >= 2;i--) {if (init[i] && init[n - i]) {cout << i << " " << n - i << endl;break;}}}}



0 0
原创粉丝点击