栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

教你如何用python实现求所有素数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

教你如何用python实现求所有素数

首先,明确目标:我们要求所有素数,所以我们确定素数的标准:

只有1和它本身是因数,也就是只有两个因数。所以我们只要判断一个数的因数是否小于两个就可以了。我们写一个求一个数因数的代码。

def factor(x):
    result = []
    for i in range(1, x + 1):      # 遍历从1到x的所有数
        if x % i == 0:             # 是否除尽
            result.append(i)
    return result

他返回的值是一个列表,如输入4210,返回[1, 2, 5, 10, 421, 842, 2105, 4210]这样我们就能知道一个数有几个因数了,就可以求出一个数是否为素数了。

def IfPrimeNumber(x):
    factor_list_long = len(factor(x))   # 获取输入值的因数个数
    if factor_list_long == 2:           # 是二就是素数
        return True
    elif factor_list_long > 2:          # 这里用elif是因为有1这个特例
        return False

整个代码也就能拼凑出来了。注意,这里的文件保存在D:/PrimeNumber.txt

n = 0


def factor(x):
    result = []
    for i in range(1, x + 1):      # 遍历从1到x的所有数
        if x % i == 0:             # 是否除尽
            result.append(i)
    return result


def IfPrimeNumber(x):
    factor_list_long = len(factor(x))   # 获取输入值的因数个数
    if factor_list_long == 2:           # 是二就是素数
        return True
    elif factor_list_long > 2:          # 这里用elif是因为有1这个特例
        return False


while True:
    n += 1
    if IfPrimeNumber(n):
        with open("D:/PrimeNumber.txt", "a") as f:
            f.write("{0}n".format(n))  # 不要问我为什么要加n,问就是因为有亿点怪
            print(f)                    # 不加可能速度更快,但加了效果更好

运行一下就知道,效果不那么好,这显然不是我想要的。所以,改亿下,只求一个数能否被所有素数整除就可以了。

最终源代码(知道你们要拷)就出现了。

x = 1
N = [2]                                       # 一个素数列表

with open("D:/PrimeNumber.txt", "w") as f:    # 2是个特殊的素数
    f.write("2n")


def IfPrimeNumber(number):
    n = number / 2
    for i in N:
        if i <= n:                            # 因为大于他一半的数,已经不可能被整除了,所以加上这一行代码
            if number % i == 0:
                return False
        else:
            return True


while True:
    x += 2                                    # 除二以外,没有偶素数
    with open("D:/PrimeNumber.txt", "w") as f:
        f.write("{0}n".format(x))
        print(x)
        N.append(x)                           # 素数列表更新

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/280156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号