首页 > 其他 > 详细

高手是怎么样练成的19

时间:2015-01-26 12:05:59      阅读:148      评论:0      收藏:0      [点我收藏+]
 da={1:0}
def solve(n):
 res=0
 #print ‘----‘
 for i in range(2,n+1):
  #print "n:%d,i:%d" % (n,i)
  if (n%i==0):
   #print "i:",i
   if da.has_key(n/i):
    res+=da[n/i]
    #print "i:%d,da[n/i]:%d,res:%d" % (i,da[n/i],res)
   else:
    da[n/i]=solve(n/i)
    res+=da[n/i]
    #print da
 da[n]=res+1
 return da[n]
a=int(raw_input("input:"))
re=solve(a)
print re
print da

源递归:
void solve(long n)  
{  
    if(n==1)  
        total++;  
    else  
    {  
        for(long i=2;i<=n;i++)  
            if(n%i==0)  
                solve(n/i);  
    }

优化后代码,利用f(n)=Ef(m)+1这个公式  备忘录来算

E表示求和         m为n的所有约数,例如n=12,m为6,4,3,2

高手是怎么样练成的19

原文:http://my.oschina.net/tigereatspinach/blog/371685

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!