Python 中的素数程序

  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

​​

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

什么是素数?

1 是质数吗

互质数

最小和最大素数

素数的Python程序


素数是令人着迷的数学实体,几个世纪以来一直吸引着数学家的兴趣。素数是大于 1 的自然数,只能被 1 和它本身整除,不能被其他因数整除。这些数字具有独特的品质,使其在密码学、计算机科学和数论等各个领域中不可或缺。它们因其不可预测性和明显的随机性而具有神秘感,但它们遵循精确的模式并表现出非凡的特性。在本问中,我们将探索素数并深入研究 Python 中素数程序的实现。最后,您将对素数有深入的了解,并能够利用编程的力量识别它们。让我们踏上这段数学之旅,用 Python 解开素数的秘密!

什么是素数?

素数是自然数的子集,其因数仅为 1 和数字本身。为什么我们担心素数和获取素数?它们可以用在哪里?我们将在本文中了解素数的整个概念。让我们开始吧。 

给定数字的因数是除法时余数为零的那些数字。这些在密码学领域对于启用公钥和私钥具有重要意义。从本质上讲,由于密码学,今天的互联网是稳定的,而这个分支在很大程度上依赖于素数。 

1 是质数吗

让我们退后一步,密切关注素数的定义。它们被定义为“不能通过两个较小的自然数相乘得到的大于 1 的自然数”。大于 1 但不是素数的自然数称为合数。 

因此,我们不能将 1 包含在素数列表中。所有素数列表都以 2 开头。因此,最小的素数是 2 而不是 1。

互质数

让我们进一步了解一下。如果我们有两个质数怎么办?任意两个质数之间有什么关系?两个素数之间的最大公约数是 1。因此,任何一对素数都会产生互素。互质数是最大公因数为 1 的数字对。我们还可以有非质数对以及质数和非质数对。例如,考虑对的数量 -

(25, 36)
(48, 65)
(6,25)
(3,2)

检查给定的字符串是否是 Python 中的回文

最小和最大素数

现在我们已经考虑了素数,那么素数的范围是多少?我们已经知道最小的质数是2。

最大的质数可能是多少?

嗯,这有一些与之相关的有趣的琐事。2018 年,互联网梅森素数大搜索的 Patrick Laroche 发现了最大的素数 282,589,933 − 1,这个数字以 10 为底数有 24,862,048 位。这是一个巨大的数字。 

现在,让我们集中精力解决与素数相关的各种问题。这些问题陈述如下:

  1. 识别它们是否是素数
  2. 获取一系列数字之间的质数集合
  3. 识别它们是否是素数。

这可以通过两种方式完成。让我们考虑第一种方法。检查 2 和数字本身之间的所有数字是否有因数。让我们实施同样的做法。始终从以下算法开始 -

算法

  1. 初始化一个从 2 开始到数字结束的 for 循环 
  2. 检查数字是否能被2整除
  3. 重复直到检查到数字-1
  4. 如果该数字可以被任何数字整除,则该数字不是质数
  5. 否则,它是素数
num = int(input("请输入一个数字: "))

if num > 1:
    # 检查因素
    for i in range(2,num):
        if (num % i) == 0:
            print(num,"不是一个素数")
            print(i,"乘以",num//i,"是",num)
            break
    else:
        print(num,"是一个素数")
# 如果输入数字小于
# 或等于1,它不是素数
else:
    print(num,"不是一个素数")

让我们考虑有效的解决方案,其中我们可以将计算量减少一半。我们只检查因子直到数字的平方根。考虑 36:它的因数是 1、2、3、4、6、9、12、18 和 36。

36 的平方根是 6。在 6 之前,除了 1 之外还有 4 个因数。因此,它不是素数。

考虑 73。它的平方根是 8.5。我们将其四舍五入为 9。73 到 9 之间除了 1 之外没有任何因数。因此它是质数。

素数的Python程序

让我们用python实现逻辑–

算法:

  1. 初始化一个 for 循环,从 2 开始,到该数的平方根的下限的整数值结束 
  2. 检查数字是否能被2整除
  3. 重复直到检查到数字的平方根。
  4. 如果该数字可以被任何数字整除,则该数字不是质数
  5. 否则,它是素数
import math

def primeCheck(x):
    sta = 1
    for i in range(2,int(math.sqrt(x))+1): 
        if(x%i==0):
            sta=0
            print("不是素数")
            break
        else:
            continue
    if(sta==1):
        print("素数")
    return sta

num = int(input("请输入一个数字: "))
ret = primeCheck(num)

我们定义一个函数 primeCheck ,它将输入作为要检查的数字并返回状态。变量 sta 是一个取 0 或 1 的变量。

让我们考虑识别给定范围内的素数的问题:

算法:

  1. 初始化上下范围之间的 for 循环
  2. 使用 primeCheck 函数检查数字是否为素数
  3. 如果不是素数,则中断循环到下一个外循环
  4. 如果是素数,则打印它。
  5. 运行 for 循环直到达到 upperRange。
def Prime_numbers_between(l_range,u_range):
    print("素数在", l_range, "和", u_range, "是:")
    Prime_numbers = []
    for num in range(l_range, u_range + 1):
        # 所有素数都比 1 大
        if num > 1:
            for i in range(2, num):
                if (num % i) == 0:
                    break
            else:
                Prime_numbers.append(num)               
    return Prime_numbers


if __name__=='__main__':
    l_range = int(input("请输入较小的数字: "))
    u_range = int(input("请输入较大的数字: "))
    print(f'{l_range}~{u_range}素数列表:{Prime_numbers_between(l_range, u_range)}')
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值