zoukankan      html  css  js  c++  java
  • 相亲数--Python

      想亲数:在遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对相亲数

    code:

     1 def sumFunc(n):   #这个是求真因数的和,真因数不包括自己
     2     a = 1
     3     b = n
     4     sum = 0
     5     while a < b:
     6         if n % a == 0:
     7             sum += (a + b)
     8         a += 1
     9         b = n / a
    10     if a == b and n % a == 0:
    11         sum += a
    12     return sum - n
    13 
    14 for x in range(2,10000):
    15     y = sumFunc(x)
    16     if x < y and x == sumFunc(y):
    17         print(x,"<-相亲数->",y)

    这个求的是 2~10000 范围的想亲数

    然后这里里面其实可以改进,由于一个数可能会多次求真因数,我们就可以浪费空间,将已经求取真因数的数存到字典里,并且将求取的值作为valuse。

     1 cache = {}
     2 def sumFunc(n):   #这个是求真因数的和,真因数不包括自己
     3     res = cache.get(n,0)  #如果没有取到这个value的值就返回0
     4     if res:
     5         return res
     6     a = 1
     7     b = n
     8     sum = 0
     9     while a < b:
    10         if n % a == 0:
    11             sum += (a + b)
    12         a += 1
    13         b = n / a
    14     if a == b and n % a == 0:
    15         sum += a
    16     cache[n] = sum
    17     return sum - n
    18 
    19 for x in range(2,10000):
    20     y = sumFunc(x)
    21     if x < y and x == sumFunc(y):
    22         print(x,"<-相亲数->",y)

    我们其实可以导入时间模块,来计算一下这两个算法时间的快慢,程序开始使用 time.time()  ,程序结束的时候在使用一次 time.time()  ,然后计算差值就可以了

  • 相关阅读:
    更改滚动条样式
    进度条代码
    css实现线条样式(中间高亮,两边透明)
    实现瀑布流布局 https://blog.csdn.net/csdn_zsdf/article/details/69367182
    css实现等高布局
    select多选框默认第一个是---请选择---
    后台返回的数据换行显示
    js实现文字无间断上下滚动
    用swiper实现类似淘抢购的滑动tab效果
    解决iframe高度自适应的问题
  • 原文地址:https://www.cnblogs.com/luojianyi/p/9516603.html
Copyright © 2011-2022 走看看