//首先将10000内的素数筛出来(约1000个),(p1,p2,p3)枚举三元组前两个p1,p2,可知若存在p3满足条件,必有p3=n−p1−p2,故令t=n−p1−p2。若t为不小于p2的素数,则t满足p3的条件。则答案加一。
代码:
#include<stdio.h> #include<string.h> #define max 10005 int prime[max]; int isprime[max]; int vis[max]; int a[max]; void Init() { int i,j,cnt=0; memset(vis,0,sizeof(vis)); memset(isprime,0,sizeof(isprime)); for(i=0;i<max;i++) { if(vis[i]==0) { prime[cnt++]=i; } for(j=0;j<cnt&&i*prime[j]<max;j++) { vis[i*prime[j]]=1; } } for(i=0;i<cnt;i++) { isprime[prime[i]]=1; } } int main() { Init(); int n; while(scanf("%d",&n)!=EOF) { int i,j,k; int sum=0; int x=0; for(i=2;i<=n;i++) { if(isprime[i]) { a[x++]=i; } } for(i=0;i<x;i++) { for(j=i;j<x;j++) { int t=n-a[i]-a[j]; if(t>=a[j]&&isprime[t]) { sum++; } } } printf("%d\n",sum); } return 0; }