xdu1028

maksyuki 发表于 oj 分类,标签:
0

1028: 数字工程

题目描述

ACM实验室开启了一个数字工程项目,希望把正整数n通过一些特殊方法变成1。

可采用的方法有:(1)减去1;(2)除以它的任意一个素因子。 每操作一次消耗一个单位的能量。

问,把n变成1最少需要消耗多少能量?

输入

多组测试

对于每组测试,输入正整数n (1<=n<=1,000,000)

输出

输出最少消耗的能量

样例输入

14

样例输出

02

提示

来源

Tom

 

题目类型:线性DP

算法分析:使用数组dp[i]表示正整数i变成1时需要消耗的最小能量,状态转移方程(我为人人型)为:dp[i*k] = min (dp[i*k], dp[i] +1)和dp[i+1] = min (dp[i+1], dp[i] + 1),其中k表示素数。初始化为:dp[i] = INF,dp[1] =0。然后先打出素数表,之后可以直接递推求解dp数组,最终查表即可