杨大哥已经提醒的差不多了。我详细说说我的思路,应该和杨大哥想的一样。
任何一个数最终能分解成:p1^r1 * p2^r2 ... ps^rs 的形式,其中 pi 都是素数,且这种分解形式是唯一的(这个结论就是杨大哥说的算术的基本定理)。这个过程称为素因数分解。比如 36 = 2^2 * 3^2。
那么 36 的全部约数能从这个形式中求出。2 这个因数能用 0次,1次,2次,3这个因数也能用0次,1次,2次,搭配起来能凑出 3*3 = 9 个组合,都是 36 的约数。比如 2 用 0 次配 3 用 0 次,就是 2^0 * 3^0 = 1。是 36 的一个约数。
一般地,对于任何数的分解形式:p1^r1 * p2^r2 ... ps^rs 一共就有 (r1+1)(r2+1)...(rs+1) 个约数。
现在反这想这个问题,如果我想要一个有 9 个因数的数,那么我需要一个式子 (r1+1)(r2+1)...(rs+1) = 9 才行。
杨大哥给了个结论,是如果 n 是质数的话,它就不可能能分解成几个数的乘积于是只能是 r1+1 = n,任意质数 p^(n-1) 都满足只有 n 个约数的条件,当然为了尽量小,要取 p = 2。
对于 9 的话,可以是 8+1 = 9, (2+1)(2+1) = 9,所以即可能是 2^8,也可以是 2^2 * 3^2。这里得找个小的。因为 2^8 可以看成 2^2 * 2^6, 所以这里就是要决断 2^6 和 3^2 谁大的问题。
这里我还没有太想好代码应该怎样处理。主要是判断如何拆分这个 n,以使得最后得的乘积尽量小。不过思路肯定是这样下去的。
[
本帖最后由 pangding 于 2012-8-28 22:28 编辑 ]