HDU 5104 Primes Problem

来源:互联网 发布:阿里云rds连不上 编辑:程序博客网 时间:2024/05/19 13:31

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5104

首先将10000内的素数筛出来(约1000个),直接枚举前两个 p1, p2, 检查n-p1-p2是不是素数。是则答案加一。
素数打表代码:

#define N 10000bool prime[N];int primes[N];void make_prime(){memset(prime,1,sizeof(prime));int cnt=0;prime[0]=false;prime[1]=false;for (int i=2;i<N;i++)  if (prime[i])    {primes[++cnt]=i;for (int k=i*i;k<N;k+=i)prime[k]=false;    }}

AC代码:

#include <iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;#define N 10000bool prime[N];int primes[N];void make_prime(){memset(prime,1,sizeof(prime));int cnt=0;prime[0]=false;prime[1]=false;for (int i=2;i<N;i++)  if (prime[i])    {primes[++cnt]=i;for (int k=i*i;k<N;k+=i)prime[k]=false;    }}int main(){    int n;    make_prime();    while(scanf("%d",&n)!=EOF)    {        int count=0;        for(int i=1;primes[i]<n;i++)            for(int j=i;primes[j]<n;j++)        {            int k=n-primes[i]-primes[j];            if(prime[k] && k>=primes[j])                count++;        }        printf("%d\n",count);    }    return 0;}


0 0
原创粉丝点击