鱼C论坛

 找回密码
 立即注册
查看: 1837|回复: 0

[作品展示] 【Python 作品】因数与倍数。

[复制链接]
发表于 2022-4-8 20:36:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
又见面啦~

前几个月学习了因数与倍数,然后突然灵机一动,决定做一个关于因数与倍数的库

不料,我卡在了最小公倍数这一块……
那时,我可不想让我的 最小公倍数的函数 只能计算两个数的最小公倍数,
于是,我不会做了……


在经历了千辛万苦,冥思苦想之后……
我把其他的函数优化了!……


算了,不骗你们,我也把最小公倍数做出来了

废话太多了,上代码
  1. """
  2. 因数与倍数
  3. """


  4. def is_prime(x):
  5.     """
  6.     判断 x 是不是质数 (x > 1)
  7.     如果 x <= 1, 返回 None
  8.     """
  9.     if isinstance(x, int) and x > 1:
  10.         for i in range(2, x // 2 + 1):
  11.             if x % i == 0:
  12.                 return False
  13.         return True
  14.     else:
  15.         return None


  16. def primes(maxnum, minnum=2):
  17.     """
  18.     返回从 minnum 到 maxnum 的质数列表
  19.     """
  20.     primes = []
  21.     for i in range(minnum, maxnum + 1):
  22.         if is_prime(i):
  23.             primes.append(i)

  24.     return primes


  25. def gen_primes(maxnum=None, minnum=2):
  26.     """
  27.     生成从 minnum 到 maxnum 的质数列表
  28.     """
  29.     if maxnum is None:
  30.         i = 0
  31.         while True:
  32.             if is_prime(i):
  33.                 yield i
  34.             i += 1
  35.     else:
  36.         for i in range(minnum, maxnum + 1):
  37.             if is_prime(i):
  38.                 yield i


  39. def composites(maxnum, minnum=4):
  40.     """
  41.     返回从 minnum 到 maxnum 的合数列表
  42.     """
  43.     composites = []
  44.     for i in range(minnum, maxnum + 1):
  45.         if not is_prime(i):
  46.             composites.append(i)

  47.     return composites


  48. def gen_composites(maxnum=None, minnum=4):
  49.     """
  50.     生成从 minnum 到 maxnum 的合数列表
  51.     """
  52.     if maxnum is None:
  53.         i = 0
  54.         while True:
  55.             if not is_prime(i):
  56.                 yield i
  57.             i += 1
  58.     else:
  59.         for i in range(minnum, maxnum + 1):
  60.             if not is_prime(i):
  61.                 yield i


  62. def factors(x):
  63.     """
  64.     返回 x 的所有因数,
  65.     如果 x < 1, 返回 None
  66.     """
  67.     f = []

  68.     if isinstance(x, int) and x > 1:
  69.         for i in range(1, x + 1):
  70.             if x % i == 0:
  71.                 f.append(i)
  72.     elif x == 1:
  73.         return [1]
  74.     else:
  75.         return None

  76.     return sorted(f)


  77. def prime_factors(x):
  78.     """
  79.     返回 x 的所有质因数
  80.     """

  81.     return (
  82.         [x] if is_prime(x) else [factors(x)[1], *prime_factors(factors(x)[-2])]
  83.     )


  84. def common_factors(x, y, *args):
  85.     """
  86.     返回 x, y ( 等等 ) 的所有公因数
  87.     """
  88.     fs = [set(i) for i in [factors(x), factors(y)] + [factors(i) for i in args]]

  89.     cf = fs[0]
  90.     for i in fs[1:]:
  91.         cf &= i

  92.     return sorted(cf)


  93. def common_multiple(x, y, *args):
  94.     """
  95.     返回 x, y ( 等等 ) 的最小公倍数
  96.     """
  97.     i = max(x, y, *args)
  98.     while True:
  99.         temp = sum([i % a == 0 for a in (x, y) + args])
  100.         if temp - 2 == len(args):
  101.             return i
  102.         i += 1
复制代码


经典名句:
这个库我以后会继续完善,有问题可以提出哦~
如果您喜欢这个库,可以给我评分哦~

评分

参与人数 3荣誉 +13 鱼币 +13 贡献 +6 收起 理由
森亦简 + 3 + 3 + 3
傻眼貓咪 + 5 + 5 鱼C有你更精彩^_^
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 14:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表