问题出自编程之美。解法是自己思路
3=1+2
9=4+5
9=2+3+4
问题:对于正整数n,输出所有可能连续自然数(至少两个)之和的算式
分析正整数2,3,9,18,30
分析2,无解
分析3,3=1+2,1个解
分析9,9=2+3+4
分析18,对其进行因式分解,18=2*3*3
设定解中有2个数,无解
设定解中有3个数,则有2*3-1,2*3,2*3+1构成一个解
设定解中有6个数,无解
设定解中有9个数,则由2-4,2-3,2-2,2-1,2,2+1,2+2,2+3,2+4,即-2,-1,0,1,2,3,4,5,6,即3,4,5,6,构成一个解
设定解中有18个数,无解
分析90,对其进行因式分解,30=2*3*3*5
设定解中有3个数,有解
设定解中有5个数,有解
设定解中有9个数,有解
设定解中有15个数,有解
设定解中有45个数,有解
归纳,n的解个数只和n的质因数的个数有关,设n的质因数情况为
p1 k1个
p2 k2个
.......
pm km个
则解的个数为
(k1+1)(k2+1)...(km+1)-1个
求在64位正整数范围内解的个数最多的数?
未想好.
上网搜了搜,大家都说根据贪心策略,结果应该为3^x,好吧这显然是错的(比如1000以内最大的,3^6,解有7个,但是225的解就有8个,所以这个贪心不成立)。
自己还未想出解法,到此为止吧