:-)让你失望了,这个算法不是我想出来的。我也很佩服想出来这个算法的人。
个人觉得这道题目很没有意思(这时候,“不告诉你”跳出来说,这道题明明很好的嘛!)。从算法推测:
从这个数的的两个数的因式入手,例如24=2*12=3*8=4*6=6*4=8*3=12*2=24*1,如果2 可以被24整除,24的sets个数就会比原来24的sets数多出24/2=12的sets个数,但这时12的sets个数没有被完全算出来,仍然是0,所以24 的sets数是0;当发现3 能被24整除时,24的个数又增加了此时8的sets数,是1,而此时 8 的sets数是一,表示的是8=2*2*2,所以24=3*2*2*2这个set被计算了。当程序发现4可以被24整除时,找6,6=2*3在3能被6整除时已经成为1了,所以24=4*2*3这个set被计算在内了。到这是没有结束,24=4*6=6*4被认为是不一样的。6能被24整除,且此时4的sets已经被算出来了,4=2*2=4*1,所以24=6*2*2=6*4被考虑在内了,这时24的个数为4个了……以此分析可以发现24的所以因式可以不重不漏地考虑在内。以下是算出24的sets的intermedia results。当i=2是,2的所有sets数必然会被算出,i=n是,n的sets数也会被算出来,……
i=2 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
i=3 0 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 (more...)
非常感谢!
另外怎样才能让“不告诉你”“破例“告诉我们呢?