#572. 质数和分解(prime)
质数和分解(prime)
Background
Special for beginners, ^_^
Description
任何大于 的自然数 ,都可以写成若干个大于等于 且小于等于 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如 的质数和表达式就有四种本质不同的形式:$$9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7$$
这里所谓两个本质相同的表达式,是指可以通过交换其中一个表达式中参加和运算的各个数的位置,而直接得到另一个表达式。
试编程求解自然数 可以写成多少种本质不同的质数和表达式。
Format
Input
多组输入,每一行存放一个自然数 ,。
Output
依次输出每一个自然数 的本质不同的质数和表达式的数目,每个数一行。
Samples
2
1
200
9845164
Limitation
1s, 1024KiB for each test case.
思路1:
第1步-划分阶段:以不同的质数来划分阶段
第2步-确定状态:f[i][j]-用前 种素数拼出和为 的不同方法数
第3步-状态转移方程:$f[i][j] = \sum_{k=0}^{\lfloor j/p[i]\rfloor}f[i-1][j-k\ast p[i]]$
其中,p[i] 为第 个质数。
第4步-确定初值:f[0][0] = 1
思路2:
第3步-状态转移方程:f[i][j] = f[i-1][j] + f[i][j-p[i]]; // j>=p[i]