您的位置:首页 > 其它

hdu 5104 Primes Problem (素数+递推)

2015-08-25 18:52 330 查看
[align=left]Problem Description[/align]
Given a number n, please count how many tuple(p1, p2, p3) satisfied that p1<=p2<=p3, p1,p2,p3 are primes and p1 + p2 + p3 = n.

[align=left]Input[/align]
Multiple test cases(less than 100), for each test case, the only line indicates the positive integer n(n≤10000).

[align=left]Output[/align]
For each test case, print the number of ways.

[align=left]Sample Input[/align]

3
9

[align=left]Sample Output[/align]

0
2

先找出所有素数,再递推。

#include<cstdio>
#include<cstring>
using namespace std;
const int N=10005;
int zj
,ssb
,pn,ans,n;
void f()
{
int i,j;
zj[0]=zj[1]=1;
pn=0;
for (i=2;i<N;i++)
{
if (!zj[i]) ssb[pn++]=i;
for (j=0;j<pn;j++)
{
if (i*ssb[j]>N) break;
zj[i*ssb[j]]=1;
if (i%ssb[j]==0) break;
}
}
}
void dfs(int sum,int x,int p)
{
if (p==2)
{
if (zj[n-sum]==0&&n-sum>=ssb[x]) ans++;
return ;
}
int i;
for (i=x;i<pn;i++)
{
if (sum+ssb[i]>=n) return ;
dfs(sum+ssb[i],i,p+1);
}
}
int main()
{
f();
while (~scanf("%d",&n))
{
ans=0;
dfs(0,0,0);
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: