HDOJ 寻找素数对 1262

寻找素数对

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


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

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

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

Sample Input
   
   
   
   
20 30 40
 

Sample Output
   
   
   
   
7 13 13 17 17 23
 

Source
浙江工业大学第四届大学生程序设计竞赛
 

Recommend
JGShining   |   We have carefully selected several similar problems for you:   1263  1431  1256  1265  1230 

打标素数~~

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 10000+10
using namespace std;
bool is_prime[10010];
int prime[10010];
int tot=0;
void init()
{
	for(int i=0;i<N;i++)is_prime[i]=false;
	is_prime[0]=is_prime[1]=true;
	for(int i=2;i<N;i++){
		if(!is_prime[i]){
			prime[tot++]=i;
			for(int j=i*2;j<N;j+=i)
			is_prime[j]=true;
		}
	}
}
int main()
{
	init();
	int M;
	while(scanf("%d",&M)!=EOF){
		for(int i=M/2;i<M;i++){
			if(!is_prime[i]&&!is_prime[M-i]){
				printf("%d %d\n",M-i,i);
				break;
			}
		}
	}
	return 0;
}

你可能感兴趣的:(HDOJ 寻找素数对 1262)