素数问题
description |
现在给你一个正整数n(n<=10000),问你有多少组(p1,p2,p3)满足p1<=p2<=p3,p1,p2,p3都是素数,且p1+p2+p3=n |
input |
|
output |
|
sample_input |
|
sample_output
此题的枚举方法主要在于两点,首先得在已知的素数序列中枚举,其次不能有过多循环,因为只有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; } |
持续更新博客地址:
blog.csdn.net/martinue