马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
经典名句:
这个库我以后会继续完善,有问题可以提出哦~
如果您喜欢这个库,可以给我评分哦~ |