首页 > 代码库 > 高手是怎么样练成的19
高手是怎么样练成的19
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。