您的位置:首页 > 其它

质数和分解(动态规划)

2016-04-08 21:48 239 查看
Description  任何大于 1 的自然数 n,都可以写成若干个大于等于
2 ,且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如9
的质数和表达式就有四种本质不同的形式:9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7
。  这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。  试编程求解自然数 n
可以写成多少种本质不同的质数和表达式。Input  每一行存放一个自然数 n ,
2≤n≤200
Output  输出每一个自然数 n
的本质不同的质数和表达式的数目
Sample
Input
Sample
Output



解题思路:


这其实就是背包问题的方案总数,不过要加多一个筛素数的过程。

s[j]表示不超过j的最大方案数,状态转移方程为:

s[j]=s[j]+s[j-a[i]]

(1<=i<=k,a[i]<=j<=n)

s
即为所求。

时间复杂度:O(n^2)


程序:

vara,s:array[0..200]of longint;f:array[0..200]of boolean;n,i,j,k:longint;beginreadln(n);fillchar(f,sizeof(f),true);f[1]:=false;for i:=2 to n doif f[i] then
for j:=2 to n div i dof[i*j]:=false;for i:=1 to n doif f[i] then
begin inc(k); a[k]:=i; end;s[0]:=1;for i:=1 to k dofor j:=a[i]
to n dos[j]:=s[j]+s[j-a[i]];writeln(s
);end.版权属于: Chris原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102vjrn.html转载时必须以链接形式注明原始出处及本声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: