POJ 2262 哥德巴赫猜想

题目详情

解法:欧拉筛法的基本应用

模板:欧拉筛法

#define MAXN 50005

bool u[MAXN];  //辅助数组做筛子
int su[MAXN]; //素数集合

void SieveofEuler(int n)
{
    int i,j,num=0;
    memset(u,true,sizeof(u));
    for(i=2;i<=n;i++)
    {
        if(u[i])
        {
            su[num++]=i;
        }
        for(j=0;j<=num;j++)
        {
            if(i*su[j]>n)
            {
                break;
            }
            u[i*su[j]]=false;
            if(i%su[j]==0)
            {
                break;
            }
        }
    }
}

题解代码

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define MAXN 1000050

using namespace std;

bool u[MAXN];  //辅助数组做筛子
int su[MAXN]; //素数集合

void SieveofEuler(int n)
{
    int i,j,num=0;
    memset(u,true,sizeof(u));
    for(i=2;i<=n;i++)
    {
        if(u[i])
        {
            su[num++]=i;
        }
        for(j=0;j<=num;j++)
        {
            if(i*su[j]>n)
            {
                break;
            }
            u[i*su[j]]=false;
            if(i%su[j]==0)
            {
                break;
            }
        }
    }
}

int main()
{
    SieveofEuler(1000050);
    int n;
    while(scanf("%d",&n)!=EOF&&n!=0)
    {
        bool ok=false;
        int i;
        for(i=0;i<=n;i++)
        {
            if(su[i]*2>n)
            {
                break;
            }
            if(u[n-su[i]])
            {
                ok = true;
                break;
            }
        }
        if(!ok)
        {
            puts("Goldbach's conjecture is wrong.");
        }
        else{
            printf("%d = %d + %d\n",n,su[i],n-su[i]);
        }
    }
    return 0;
}
全部评论

相关推荐

小鸡蛋吃布丁:上岸编制,考个偏远的四五线小县城的话那确实难度不高,工资三四千的,但是考发达地区的纯看实力和运气了
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务