Goldbach`s Conjecture (数论,素数打表)

题目来源:https://vjudge.net/problem/LightOJ-1259
【题意】
问一个大于2的偶数可以由多少组素数和组成。
坑点:素数打表的判断是否为素数的数组一定要是bool型,不然MLE。
【思路】
素数打表,然后判断就可以了。
【代码】


#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int INF=1e9;
typedef long long LL;
bool b[10000000+10];
int prime[700000+10];
int num=1;
int E_F(int p,int *a)
{
    int Left=1,Right=num,mid;
    while(Left2;
        printf("%d %d %d\n",mid,Left,Right);
        if(a[mid]==p)
            return mid;
        else if(a[mid]else
            Right=mid-1;
    }
    return Left;
}
int main()
{
    mem(b,0);
    b[0]=b[1]=1;
    for(int i=2;i<=10000000;i++)
    {
        if(!b[i])
        {
            prime[num++]=i;
            for(int j=i*2;j<=10000000;j+=i)
            {
                b[j]=1;
            }
        }
    }
    int T,cases=1;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        int mid=n/2;
        int pos=E_F(mid,prime);
        int ans=0;
        for(int i=1;i<=pos;i++)
        {
           if(!b[n-prime[i]])
            ans++;
        }
        printf("Case %d: %d\n",cases++,ans);
    }
}

你可能感兴趣的:(ACM竞赛,【数论】--素数问题,ACM的进程)