HDOJ探索素数対1262

1719 ワード

素数ペアを探す
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9491    Accepted Submission(s): 4810
Problem Description
ゴッドバッハは皆さんが知っていると思います.私たちは今この結論を証明したいのではなく、プログラム言語の内部で表すことができる数セットで、任意に偶数を取り出して、2つの素数を探して、その偶数に等しくしたいと思っています.
この事実を完成すれば、この推測が成立したことを説明することができる.
同じ偶数を表すために異なる素数対を持つことができるので、探している素数対が2つの値に最も近いことが要求される.
 
Input
入力は偶数整数M(5 
Output
偶数毎に、互いに最も近い2つの素数を出力し、その和は偶数に等しい.
 
Sample Input

   
   
   
   
20 30 40

 
Sample Output

   
   
   
   
7 13 13 17 17 23

 
Source
浙江工業大学第4回大学生プログラム設計コンテスト
 
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
",M-i,i); break; } } } return 0; }