|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
又见面啦~
前几个月学习了因数与倍数,然后突然灵机一动,决定做一个关于因数与倍数的库。
不料,我卡在了最小公倍数这一块……
那时,我可不想让我的 最小公倍数的函数 只能计算两个数的最小公倍数,
于是,我不会做了……
在经历了千辛万苦,冥思苦想之后……
我把其他的函数给优化了!……
算了,不骗你们,我也把最小公倍数做出来了!
废话太多了,上代码!
- """
- 因数与倍数
- """
- def is_prime(x):
- """
- 判断 x 是不是质数 (x > 1)
- 如果 x <= 1, 返回 None
- """
- if isinstance(x, int) and x > 1:
- for i in range(2, x // 2 + 1):
- if x % i == 0:
- return False
- return True
- else:
- return None
- def primes(maxnum, minnum=2):
- """
- 返回从 minnum 到 maxnum 的质数列表
- """
- primes = []
- for i in range(minnum, maxnum + 1):
- if is_prime(i):
- primes.append(i)
- return primes
- def gen_primes(maxnum=None, minnum=2):
- """
- 生成从 minnum 到 maxnum 的质数列表
- """
- if maxnum is None:
- i = 0
- while True:
- if is_prime(i):
- yield i
- i += 1
- else:
- for i in range(minnum, maxnum + 1):
- if is_prime(i):
- yield i
- def composites(maxnum, minnum=4):
- """
- 返回从 minnum 到 maxnum 的合数列表
- """
- composites = []
- for i in range(minnum, maxnum + 1):
- if not is_prime(i):
- composites.append(i)
- return composites
- def gen_composites(maxnum=None, minnum=4):
- """
- 生成从 minnum 到 maxnum 的合数列表
- """
- if maxnum is None:
- i = 0
- while True:
- if not is_prime(i):
- yield i
- i += 1
- else:
- for i in range(minnum, maxnum + 1):
- if not is_prime(i):
- yield i
- def factors(x):
- """
- 返回 x 的所有因数,
- 如果 x < 1, 返回 None
- """
- f = []
- if isinstance(x, int) and x > 1:
- for i in range(1, x + 1):
- if x % i == 0:
- f.append(i)
- elif x == 1:
- return [1]
- else:
- return None
- return sorted(f)
- def prime_factors(x):
- """
- 返回 x 的所有质因数
- """
- return (
- [x] if is_prime(x) else [factors(x)[1], *prime_factors(factors(x)[-2])]
- )
- def common_factors(x, y, *args):
- """
- 返回 x, y ( 等等 ) 的所有公因数
- """
- fs = [set(i) for i in [factors(x), factors(y)] + [factors(i) for i in args]]
- cf = fs[0]
- for i in fs[1:]:
- cf &= i
- return sorted(cf)
- def common_multiple(x, y, *args):
- """
- 返回 x, y ( 等等 ) 的最小公倍数
- """
- i = max(x, y, *args)
- while True:
- temp = sum([i % a == 0 for a in (x, y) + args])
- if temp - 2 == len(args):
- return i
- i += 1
复制代码
经典名句:
这个库我以后会继续完善,有问题可以提出哦~
如果您喜欢这个库,可以给我评分哦~ |
评分
-
查看全部评分
|