HDOJ 5104 -----素数问题

来源:互联网 发布:软件广告好烦 编辑:程序博客网 时间:2024/05/16 09:43

题目大意:给出一个n,找出3素数p1,p2,p3且p1<=p2<=p3使其之和为n的三元组的个数。

算法思想:

先用筛选法打一个规模为MAXN的素数表,然后暴力寻找满足条件的三元组,特别要注意只能用两个循环,否则会超时。

代码如下:

#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int MAXN=10100;bool Prime[MAXN]={0};int main(){    for(int i=2;i*i<MAXN;i++){       if(!Prime[i])           for(int j=2*i;j<MAXN;j+=i){               Prime[j]=true;           }    }    int n;    while(cin>>n){        int num=0;        for(int i=2;i<n/2;i++){            if(Prime[i]) continue;            for(int j=i;j<n/2;j++){                if(Prime[j]) continue ;                if(n-i-j>=j&&!Prime[n-i-j])                 num++;            }        }      cout<<num<<endl;    }    return 0;}


0 0
原创粉丝点击