Board logo

标题: [原创代码] 无忧公主的数学时间134扩展 [打印本页]

作者: 元芳你怎么看    时间: 2016-4-5 09:57     标题: 无忧公主的数学时间134扩展

/*
通过传入第一个值和圈数,返回结果。
**/
def Ghost_sumfactors(num,n):
        tmpnum = int(num)
        a = num - tmpnum
        if a != 0:
                return "Please enter a positive integer!"
        else:
                for i in range(1,n+1):
                        sum = 1 + num                       
                        m = int(math.sqrt(num)) + 1
                        for j in range(2,m):
                                if num%j == 0:
                                        sum = sum + j + num//j
                        num = sum
                       
                return sum
作者: codegay    时间: 2016-4-5 10:01

本帖最后由 codegay 于 2016-4-6 01:56 编辑
  1. """
  2. 无忧公主的数学时间134.py
  3. http://mp.weixin.qq.com/s?__biz=MzI5ODEwMDQyNw==&mid=403013919&idx=2&sn=7439014ae0182cb4b0222fc2234b34c3&3rd=MzA3MDU4NTYzMw==&scene=6#rd
  4. 2016年4月5日 21:46:24
  5. 求正整数n的因数之和的因数之和.
  6. """
  7. #输入一个正整数n,返回n因数之和的因数之和.也就是2次求因数之和
  8. def factorsx(n,x=2):#x为进行求因素之和的次数
  9.     #def f(n):return sum([r for r in range(1,n+1) if n%r==0])#返回N的因数之和
  10.     #f=lambda n:sum([r for r in range(1,n+1) if n%r==0])#等效写法
  11.     f=lambda n:n+sum([r for r in range(1,n//2+1) if n%r==0])#-_-假装优化一下
  12.     for r in range(x):
  13.         n=f(n)
  14.     print(n)
  15.     return n
  16. factorsx(11)
复制代码
楼主的程序可能有BUG,以下输出97,按我的理解,应该是91.

print(Ghost_sumfactors(36,1))
作者: codegay    时间: 2016-4-5 10:04

这个网站题很多,https://projecteuler.net/
作者: 元芳你怎么看    时间: 2016-4-5 16:09

回复 3# codegay


    谢谢指教!!!!
作者: codegay    时间: 2016-4-5 21:07

本帖最后由 codegay 于 2016-4-5 21:10 编辑

看她的解题思路 http://mp.weixin.qq.com/s?__biz= ... Mw==&scene=6#rd

以及sum是python中一个内置函数。保持不要用内置函数当变量名是个好习惯。
作者: 元芳你怎么看    时间: 2016-4-6 11:17

本帖最后由 元芳你怎么看 于 2016-4-6 11:26 编辑
  1. """
  2. 根据朋友们提出的问题和建议新改了下
  3. 无忧公主的数学时间134:
  4. http://mp.weixin.qq.com/s?__biz=MzI5ODEwMDQyNw==&mid=403013919&idx=2&sn=7439014ae0182cb4b0222fc2234b34c3&3rd=MzA3MDU4NTYzMw==&scene=6#rd
  5. """
  6. def Ghost_sumfactors(num,n):
  7. tmpnum = int(num)
  8. a = num - tmpnum
  9. if a != 0:
  10. return "Please enter a positive integer!"
  11. else:
  12. for i in range(1,n+1):
  13. sumfactors = 1 + num
  14. m = int(math.sqrt(num)) + 1
  15. for j in range(2,m):
  16. if num%j == 0:
  17. sumfactors = sumfactors + j + num//j
  18. if math.sqrt(num) - m + 1 == 0:
  19. sumfactors = sumfactors - math.sqrt(num)
  20. num = sumfactors
  21. return sumfactors
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2