鱼C论坛

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

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

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

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

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

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

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 19:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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