Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39398
  • 博文数量: 22
  • 博客积分: 1130
  • 博客等级: 少尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-11 17:20
文章分类

全部博文(22)

文章存档

2010年(3)

2009年(19)

我的朋友
最近访客

分类: C/C++

2009-10-26 21:45:29

筛选法建素数表,差值最大的就是为获得得第一个素数对,和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;
}


阅读(327) | 评论(0) | 转发(0) |
0

上一篇:POJ 2192

下一篇:一起来用命令

给主人留下些什么吧!~~