#572. 质数和分解(prime)

质数和分解(prime)

Background

Special for beginners, ^_^

Description

任何大于 11 的自然数 NN,都可以写成若干个大于等于 22 且小于等于 NN 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如 99 的质数和表达式就有四种本质不同的形式:$$9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7$$

这里所谓两个本质相同的表达式,是指可以通过交换其中一个表达式中参加和运算的各个数的位置,而直接得到另一个表达式。

试编程求解自然数 NN 可以写成多少种本质不同的质数和表达式。

Format

Input

多组输入,每一行存放一个自然数 NN2N2002\le N\le 200

Output

依次输出每一个自然数 NN 的本质不同的质数和表达式的数目,每个数一行。

Samples

2
1
200
9845164

Limitation

1s, 1024KiB for each test case.

思路1:

第1步-划分阶段:以不同的质数来划分阶段

第2步-确定状态:f[i][j]-用前 ii 种素数拼出和为 jj 的不同方法数

第3步-状态转移方程:$f[i][j] = \sum_{k=0}^{\lfloor j/p[i]\rfloor}f[i-1][j-k\ast p[i]]$

其中,p[i] 为第 ii 个质数。

第4步-确定初值:f[0][0] = 1

思路2:

第3步-状态转移方程:f[i][j] = f[i-1][j] + f[i][j-p[i]]; // j>=p[i]