前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python判断一个数是否为素数

Python判断一个数是否为素数

原创
作者头像
Magneto
发布2022-07-18 14:11:28
1.1K0
发布2022-07-18 14:11:28
举报
文章被收录于专栏:春花秋月春花秋月

前言

本文转自 Python学习日记 – 素数判断

扶木成枫 – 生命的绽放​fmcf.cc​fmcf.cc

对于一个数是否为素数,常规的方法就是 2、5、7、11、13、17 来试验,可是这样的方法仅在 1000 以下的数有较高正确率,就在想,有没有一种绝对正确并且不使用 Python 其它模块的方法来判断素数,毕竟有了 Python 数学模块,素数的判断就变得很简单了,但是引入一个数学模块似乎会有些多余了。

常规算法

代码语言:python
复制
print("素数的概念是只可以被1和它本身整除的数字。\n欢迎来到这里,我们将在这里计算你所输入的数字是否为素数。")
while True:
    number = input("输入你的数字吧:")
    number = int(number)
    if number == 2:
        print("是素数")
    elif number == 3:
        print("是素数")
    elif number == 5:
        print("是素数")
    elif number == 7:
        print("是素数")
    elif number == 11:
        print("是素数")
    elif number == 17:
        print("是素数")
    elif number == 13:
        print("是素数")
    elif number == 19:
        print("是素数")
    else:
        if number % 2 == 0:
            print("\t此数可以被2整除,因此不是素数。")
        else:
            if number % 3 == 0:
                print("\t此数可以被3整除,因此不是素数。")
            else:
                if number % 5 == 0:
                    print("\t此数可以被5整除,因此不是素数。")
                else:
                    if number % 7 == 0:
                        print("\t此数可以被7整除,因此不是素数。")
                    else:
                        if number % 11 == 0:
                            print("\t此数可以被11整除,因此不是素数。")
                        else:
                            if number % 13 == 0:
                                print("\t此数可以被13整除,因此不是素数。")
                            else:
                                if number % 17 == 0:
                                    print("\t此数可以被17整除,因此不是素数。")
                                else:
                                    if number % 19 == 0:
                                        print("\t此数可以被19整除,因此不是素数。")
                                    else:
                                        print("是素数")

总共46行代码,可以在极短时间内,判断一个数是否为素数,但是这个算法,是不准确的!

如图,我们输入 5773 这个数字,它至少可以被 23、251、5773、1 这四个数整除,但是算法显示,是素数,因此这个算法是不准确的。

但是这个算法有个好处就是,可以很快的得出结论,是不需要消耗多少CPU算力的。

高阶算法

我们知道有一种绝对是素数的计算方法。

在判断一个数 n 是否是素数时,我们可以用从 1 到 n 的所有数,挨个去除 n 得到是否整除,如果整除的次数大于 2 就意味着除了 1 和 n 本身外,存在其它数可以整除它,就违背了素数的概念,意味着这个 n 就不是素数,反之是素数。

代码语言:python
复制
print("提示:最终结果的显示时间取决与CPU的算力和你输入的数大小\n建议输入一千万以下的数字,数字太大无法在短时间内得出结果")
x = int(input('输入一个数:'))
z = 0
for i in range(1,x+1):
    if x % i == 0:
        z = z+1
if z > 2:
    print("不是素数")
else:
    print("是素数")

这是一个高阶算法,利用Python本身的代码和函数完成的工作,它计算得到的结果是 100% 正确的,但是它有个唯一的缺点,因为使用的是穷举法,如果是十分巨大的数,我们无法在短时间内得到结果,需要消耗 CPU 的巨大算力去运算才行。

算法思维构建

常规算法

图上仅显示了一个简单的思维过程,其实是以此类推的,我们可以继续除7、11、13、17、23之类的。

高阶算法

这是一个近乎完美的方法

代码分析

前言

此次代码分析由于大量使用已经讲过的算法,因此仅分析两个内置函数。

使用 int() 进行数字转换

int() 函数在高阶算法中有使用,我们使用 int()input() 嵌套,不必再多写一行代码来转换,其作用和 ="https://fmcf.cc/technology/654/#%E5%B0%86%E6%95%B4%E6%95%B0%E5%92%8C%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%8D%A2%E6%88%90%E6%B5%AE%E7%82%B9%E6%95%B0">float() 函数类似,但是它不会使得数字转化为浮点数,而是一个实实在在的数。

代码语言:python
复制
a = "2"
b = int(a)
print(b)
c = b+1
print(b)
print(c)

一个简单的实例,就可以看出它与 float() 函数的区别

运行结果是这样

代码语言:javascript
复制
2
2
3

它是不带小数点和小数点后面的数的。

使用 range() 来生成数

很简单的一个函数,可以到 Python range() 函数用法 | 菜鸟教程 具体学习。

我这里只举一个简单的例子

代码语言:python
复制
for a in range(1,10):
    print(a)

输出结果

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9

尾声

素数算法的研究,是我开始算法研究迈出的第一步,以后会慢慢进步的!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 常规算法
  • 高阶算法
  • 算法思维构建
    • 常规算法
      • 高阶算法
      • 代码分析
        • 前言
          • 使用 int() 进行数字转换
            • 使用 range() 来生成数
            • 尾声
            相关产品与服务
            腾讯云代码分析
            腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档