码迷,mamicode.com
首页 > 其他好文 > 详细

高手是怎么样练成的19

时间:2015-01-26 12:07:46      阅读:146      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!