pascal质数问题任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 的质数和表
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/29 12:19:59
pascal质数问题任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 的质数和表
pascal质数问题
任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 的质数和表达式就有四种本质不同的形式:9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7 .
这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式.
试编程求解自然数 N 可以写成多少种本质不同的质数和表达式.
输入格式
读入一个自然数 N ,2≤N≤2000.
输出格式
依次输出每一个自然数 N 的本质不同的质数和表达式的数目.
输入样例
2
输出样例
1
Hint
对于40%的数据 N
pascal质数问题任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 的质数和表
这是DP吧.
注意:这是一个完全背包问题.
程序是网上找的,今天太迟了,已经23:00了,看看这个程序,应该符合要求,如果有疑问,
var n,i,j,k,p,la:longint;
f:array[0..200]of longint;
a:array[1..100]of longint;
bo:array[1..200]of boolean;
begin
for i:=1 to 200 do bo[i]:=true;
bo[1]:=false; la:=0;
for i:=2 to 200 do
if bo[i] then
begin
inc(la); a[la]:=i;
j:=i*2;
while j