description
|
现在给你一个正整数n(n<=10000),问你有多少组(p1,p2,p3)满足p1<=p2<=p3,p1,p2,p3都是素数,且p1+p2+p3=n
|
input
|
输入只有一行,为n(n<=10000)
|
output
|
输出也只有一行,即所问有多少组(p1,p2,p3)
|
sample_input
|
3
9
|
sample_output
0
2
此题的枚举方法主要在于两点,首先得在已知的素数序列中枚举,其次不能有过多循环,因为只有10000,所以所有的素数可以首先筛选出来,不过筛选的时候得做一下标记,这是为了p3方便判断是否为素数,否则用普通方法判断就会超时,然后再在所有素数数组里遍历,就解决啦。下面附上代码仅供参考:
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,m=0;
int f[1500],a[10000]={0};
for(int q=2;q<=10000;q++)
{
int flag=1;
for(int i=2;i<q;i++)
if(q%i==0)
{
flag=0;
break;
}
if(flag==1)
{
f[m]=q;m++;a[q-1]=1;
}
}
while(scanf("%d",&n)!=EOF)
{
int s=0;
for(int i=0;i<m;i++)
{
for(int j=i;j<m;j++)
{
int p3=n-f[i]-f[j];
if(p3<f[i]||p3<f[j]||f[j]<f[i])
break;
if(a[p3-1]==1)
s++;
}
}
cout<<s<<endl;
}
return 0;
}
|
转载于:https://www.cnblogs.com/martinue/p/5490588.html