喵哈哈村的狼人杀大战(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 }