判断一个数是否为质数的三种方法
转载自:https://blog.csdn.net/m0_37586991/article/details/79673837?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
因为看了上面这篇文章,感觉思路很棒,但原文是用C++写的,所以想写个python的版本。本文的大体结构与原文类似。
质数的定义:在大于1的自然数中,除了1和它本身以外不再有其他因数。
1)直观判断法
- def isPrime(num):
- for i in range(num):
- for j in range(2, num):
- if i % j == 0:
- break
- else:
- return True
2)直观判断法改进
- from math import sqrt
- def isPrime(num):
- for i in range(num):
- for j in range(2, int(sqrt(num))):
- if i % j == 0:
- break
- else:
- return True
3)质数规律判断法
首先看一个关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等;
证明:令x≥1,将大于等于5的自然数表示如下:
······6x-2,6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6x+6,6x+7······
也就是
······2(3x-1),6x-1,6x,6x+1,2(3x+1),3(2x+1),2(3x+2),6x+5,6(x+1),6(x+1)+1······
可以看到,不在6的倍数两侧,即6x两侧的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2),所以它们一定不是素数,再除去6x本身,显然,素数要出现只可能出现在6x的相邻两侧。这里要注意的一点是,在6的倍数相邻两侧并不是一定就是质数。
- from math import sqrt
- def isPrime(num):
- if num == 2 or num == 3: # 两个较小的数进行处理
- return True
- if num % 6 != 1 and num % 6 != 5: # 不在6的倍数的两侧的一定不是质数
- return False
- tmp = int(sqrt(num))
- for i in range(5, tmp+1): # 在6的倍数两侧的也可能不是质数
- if num % i == 0 or num % (i+2) == 0:
- return False
- return True # 剩下的全是质数
- for i in range(2, 200): # 这里的range函数起始值必须为2,否则第3种方法运行时会把1当作质数输出
- if isPrime(i):
- print(i, end=' ')
方法三正确写法
from math import sqrt
def is_prime(n):if n <= 3:return n > 1#因为6的倍数+2可以被2整除,6的倍数+3可以被3整除,6的倍数+4可以被2整除,6的倍数可以被6整除#所以只有n = 6的倍数+1或者+5才有可能是素数if n%6 != 1 and n%6 != 5:return False#除此之外,还要判断该数可否被6的倍数+1或者+5整除#比如25虽然在24(4*6)的右边,但它可以被5(0+5)整除#比如49虽然在48(8*6)的右边,但它可以被7(6+1)整除for i in range(5,int(sqrt(n) + 1),6):if n%i == 0 or n%(i+2) == 0:return False return True
判断一个数是否为质数的三种方法相关推荐
- python脚本判断一个数是否为素数的几种方法
质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...
- python中判断一个数是否为素数_【转载】Python脚本判断一个数是否为素数的几种方法...
质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...
- C语言中三个数比较大小详解——三种方法
C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...
- php100以内质数求和,100以内的质数_PHP质数计算三种方法 php求100以内的质数
摘要 腾兴网为您分享:PHP质数计算三种方法 php求100以内的质数,自动刷宝,长沙银行,猿辅导,愈加等软件知识,以及cf一键刷枪,业主名录采集软件,卡乐光电,魔方虚拟光驱,掌上徐州,卡农社区,fa ...
- jQuery判断复选框是否选中的三种方法
jQuery判断复选框是否选中的三种方法. PS:下面的代码为通过循环找到在多个复选框中被选中的复选框,并对其删除 //判断复选框是否选中的第一种方法: $.each(buttons,function ...
- Angular Js 判断对象不为空对象的三种方法
前言 在写前端时,很多时候都需要去校验后端返回的数据是否是个空对象.这里就介绍三种方法 第一种 //将json对象转化为json字符串,再判断该字符串是否为"{}" JSON.st ...
- Javascript 判断一个数是否为素数的三种解法
判断一个数是否为素数(质数):只能被1和其本身整除的数. 方案一:只有两个因子 (计算因子的个数是否是2,如果是2,是素数) 方案二:因子之和 == 该数 + 1 方案三:通过一个开关控制该数是否 ...
- Java技巧分享:判断字符串是否为空常的三种方法
很多初学Java的小伙伴肯定都有遇到过需要判断一个字符串是否为空的情况,那么你知道应该如何实现吗?今天小千就来给大家介绍三种不同的方式,同学们看一下哪个适合自己. 判断字符串是否为空有三种常见的方法分 ...
- jquery判断方法是否存在_判断图中是否有环的三种方法
0.什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径. 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环. 1.拓扑排序 1.1.无向图 使用拓扑排序 ...
最新文章
- CentOS 查看IP,端口 修改IP,打开端口生效
- Java 文件压缩与解压缩
- AF_UNIX和AF_INET
- MVC模式 与 Model2模型 介绍
- promehteus 监控超时_使用 Prometheus Operator 监控 Kubernetes Etcd
- 全面解读新中产:有房有车有贷、半数决策看老婆
- 【C 语言提高、进阶】Day 3
- 【开源】一个有趣的文字冒险游戏
- matlab中产生对角阵,关于matlab中的diag函数(矩阵对角元素的提取和创建对角阵)
- sql数据库置疑解决办法
- Maya及UE4的 ART相关
- vue.config.js跨域配置
- linux的dd命令与cp,dd命令中seek和skip的用法-Linux下挂载 windows 共享的命令-学习history命令的使用方法_169IT.COM...
- 使用netron对mnist网络结构分析
- 微信小程序入门之常用组件(04)
- android 画图一
- Excel报:文件已损坏无法打开错误问题解决
- 基于EasyNVR实现RTSP_Onvif监控摄像头Web无插件化直播监控
- java软件工程师自我评价_java软件工程师自我评价简历范文
- 阿泡的产品管理工具包之产品经理的34个感想