喵哈哈村的魔法考试 Round #5 (Div.2) C

喵哈哈村的狼人杀大战(4)

发布时间: 2017年3月6日 11:36   最后更新: 2017年3月6日 11:39   时间限制: 1000ms   内存限制: 128M

喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!

徐元帅同学今天他抽到的是女巫的身份,按照他的一贯玩法,他喜欢一开始就把自己毒死。

于是他早早的就出去了。

 

他很无聊,于是出了一道题给自己玩。

他从怀里面掏出了一个数字n。

他想知道有多少组三元组(a,b,c),满足a<=b<=c,且a,b,c都是素数,而且a+b+c=n。

本题包含若干组测试数据。
每组测试数据只含有一个整数n。
1<=n<=10000

输出三元组的数量。

复制
3
9
0
2

这个题目就是先给素数打表,写一个素数数组...然后再去判断就好了(小细节...枚举前两个素数,最后一个用n减出来再判断一下)
 1 #include<iostream>
 2 #include<set>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<string.h>
 6 using namespace std;
 7 int n, p[5001], is_p[10002], len=0;
 8 void is_prime(int n){
 9     is_p[0]=1;
10     is_p[1]=1;
11     for(int i=2; i<n; i++){
12         if(is_p[i]==0){
13             p[len++]=i;
14             for(int j=i*2; j<n; j+=i){
15                 is_p[j]=1;
16             }
17         }
18     }
19 }
20 int main(){
21     memset(is_p, 0, sizeof(is_p));
22     is_prime(10002);
23     while(cin>>n){
24         int cnt=0;
25         for(int i=0; i<len; i++){
26             for(int j=i; j<len; j++){
27                 int a=p[i], b=p[j], c=n-a-b;
28                 if(a+b>=n)    break;  //这里注意一下...要先判断下a+b和n的值,否则如果不判断的话,下一步is_p[]会re
29                 if(is_p[c]==0&&c>=b) cnt++;
30             }
31         }
32         cout<<cnt<<endl;
33     }    
34     return 0;
35 }

 

posted @ 2017-03-16 14:55  code_lc  阅读(135)  评论(0编辑  收藏  举报