第一题,质因数分解问题
由于数据规模不大,所以完全可以使用试除法,从2开始,每次找到一个因子后,nt /= i,并把试除起点重新设置为2,这样可以保证所有找到的因子不可能为合数.因此还避免了素数判定。
第二题,大数的二进制十进制互相转换
本题包括的两个子问题如下:
1.十进制大数串转换为二进制的问题,实际上是大数除以一个int型数据的问题,这比大数除大数的除法要简单得多,可以直接使用小学时学过的试除法,
即从高位开始,每位除以2,当然,要记得加上上一次除剩下来的结果。
2.二进制串转换为十进制。由于是大数,这里求2的幂的次数非常高,我的做法便是使用类似于求任意位阶乘的方法求出2的任意次幂,然后再用大数加法。这种做法是最原始的,但由于数学知识有限,只能如此了。
第三题,邮票面值问题
这个实际上是经典的0-1背包问题,状态转移方程基本上可以不做任何修改。
不过有个值得注意的问题是:
对于背包问题,如果只求最优解,而无需要恰好装满背包,则把全部初始化为0。
若要求刚好装满背包,则需要做如下初始化:
这种差别很微妙,需要认真体会一下。