筛选法建素数表,差值最大的就是为获得得第一个素数对,和2909一样的题目,改改就ac。
Memory: 1156K |
| Time: 110MS |
Language: C++ |
| Result: Accepted |
#include <iostream>
#include <math.h>
using namespace std;
const int MAX=1000001;
bool Prime[MAX];
int N;
void SetPrimeTableQuick()
{
int j;
memset(Prime,false,sizeof(Prime));
for(int i=2;i<MAX;i++){
if(i%2)
Prime[i]=true;
}
for(int i=3;i<=sqrt((double)MAX);i++){
if(Prime[i]){
for(j=i+i;j<MAX;j+=i)
Prime[j]=false;
}
}
Prime[2]=true;
}
void Process(int x)
{
int a,b;
for(int i=2;i<N;i++)
{
if(i>=x)
break;
if(!Prime[i])
continue;
int diff=x-i;
if(Prime[diff])
{
a=diff<i?diff:i;
b=x-a;
break;
}
}
printf("%d = %d + %d\n",x,a,b);
}
int main()
{
SetPrimeTableQuick();
while(scanf("%d",&N)!=EOF&&N)
{
Process(N);
}
return 0;
}
|
阅读(332) | 评论(0) | 转发(0) |