`
EmmaZhao
  • 浏览: 32286 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

判断一个数是质数的几种方法

    博客分类:
  • math
阅读更多
质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。
判断一个数是质数的最简单的方法如下:
def isPrime1(n):
	for i in range(2, n):
		if n % i == 0:
			return False
	return True

但是在上面的方法中有一些冗余的计算,所以做以下改进
def isPrime2(n):
	import math
	if n == 1:
		return False
	elif n < 4:
		return True
	else:
		r = int(math.floor(math.sqrt(n)))
		for i in range(2,r+1):
			if n % i == 0:
				return False
		return True

上面的方法对第一种方法做了一些改进,但是还可以再细分一些情况,如下:
def isPrime(n):
	import math
	if n == 1:
		return False
	elif n < 4:
		return True
	elif n & 1 == 0:
		return False
	elif n < 9:
		return True
	elif n %3 == 0:
		return False
	else:
		r = math.floor(math.sqrt(n))
		f = 5
		while f <= r:
			if n % f == 0:
				return False
			if n %(f+2) == 0:
				return False
			f += 6
		return True

判断15485863是否是素数时,三者的运行时间如下:
1.9960000515
0.0139999389648
0.0090000629425


4. 打表法:
可以事先列出M(M为正整数)下的素数表,判断一个数是否为素数时,可以直接在表中查找,这是最快的方法了,但是需要额外的存储空间,是一种用空间换取时间的方法。
下面是列出M以下的所有素数的一种方法。
def primeBelowM(m):
	num = [True for i in range(m)]
	for i in range(2,m):
		k = (m-1)/i
		for j in range(2,k+1):
			num[j*i] = False
	prime = []
	for i in range(2,m):
		if num[i]:
			prime.append(i)
	return prime



【注1】
引用
http://baike.baidu.cn/view/333373.htm
分享到:
评论

相关推荐

    ACM素数的几种判断方法和实现

    ACM的素数判断,包括米勒拉宾伪素数判定,筛选法。

    素数判断的几种方法代码实现及其复杂度分析.pdf

    素数判断的几种方法代码实现及其复杂度分析.pdf

    python判断素数的几种方式

    python判断素数的几种方式

    素数判断的几种方法代码实现及其复杂度分析

    不同素数判定方法及C语言代码实现,分析各种方法的事件复杂度,适用于大数处理。

    Java 课程设计

    1. 输出50—100间的所有素数,其中判断一个数是否为素数用函数完成。 2. 设计一个学生成绩管理系统,能输入学生的学号、姓名和成绩等数据,能按成绩从高到低进行排序,并能将排序的结果输出。 提示: 设计一个学生类...

    javascript实现计算指定范围内的质数示例

    算法:判断一个数是否是质数,只需判断它是否能被小于它开跟后后的所有数整除,这样做的运算就会少了很多,因此效率也高了很多。算法来源:《Java求质数的几种常用算法》 javascript计算指定范围内的质数源代码: &...

    素数筛(5种)

    关于筛素数大概有以下几种方法 1.遍历2–(n-1)判断有没有除一和其本身以外的因子。 2.加一点点技巧因为n=n的1/2次方乘以n的1/2次方,所以若n在2-(根号n)存在因子,则在根号n–n也存在因子,所以我们只需要遍历2...

    素数判定算法的实现

    根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数。 代码如下: bool is_primer1(int num) {    int i;    for(i = 2; i &lt; num; i++) {    if(num % ...

    练习P20入门版答案

    四个班的班长都说不是自己班做的,这就难坏了校长,后来得知四个班的班长中有两个 说得是真话,有两个没有说真话,请你利用计算机的逻辑判断编一个程序,找出究竟是哪个 班做了这件好事。不能手算后直接打印结果。 ...

    Java时间类型和字符串之间的各种转换及几种常见的排序

    个人积累的Java工具类扩展类,包括字符数组转字符串,质数判断,辗转相除法求最大公约数,对字符串的一些判断,几种常见的数组排序、插入、查找等,闰年判断 日期字符串解析等与日期有关的操作,随机字符串。...

    RSA算法的纯Python实现(源码)

    RSA算法的纯Python实现,...RSA算法原理基于两个大质数的乘积很难因式分解,几种算法的优劣主要体现在质数判断、快速乘模运算、快速幂模运算等。如需实际应用建议使用大能们的实现:https://pypi.python.org/pypi/rsa/

    LeetCode判断字符串是否循环-SimpleAlgorithm:简单算法

    判断是否为HappyNumber,输入一个数,将该数的各个位数进行平方,然后求和,再取各个位数进行平方,再求和,直到为1(此时平方求和不再改变),则为HappyNumber。如果结果是某些无限循环的非1的值,则不是Happy...

    语言程序设计课后习题答案

    其缺点是它表示数的容量较小,表示同一个数,二进制较其他进制需要更多的位数。 1-9 请将以下十进制数值转换为二进制和十六进制补码: (1)2 (2)9 (3)93 (4)-32 (5)65535 (6)-1 解: (1) (2)10 = ...

    算法导论(part1)

    编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。.. 3.图文并茂,可读性强。 书中的算法均以通俗易懂的语言进行说明,并采用了大量插图来说明算法是如何工作的,易于...

    javascript入门笔记

    1、声明一个变量 r ,来表示一个圆的半径,并赋值 2、声明一个常量PI ,来表示圆周率3.14 3、通过 r 和 PI 来计算 该圆的周长,保存在变量l中 周长 = 2 * π * 半径 4、通过 r 和 PI 来计算 该圆的面积,保存在...

    c语言上机实验报告报告.doc

    算法描述流程图 主函数流程图: 判断素数函数流程图: 源程序 int a(int n) /*设计一个求素数的函数*/ { int i; for(i=2;i;i++) if(n%i==0) return 0; /*不是素数则返回0*/ return 1; /*是素数则返回1*/ } main() {...

    C语言程序设计标准教程

    第四行的输出语句格式控制串中,两格式串%d 之间加了一个空格(非格式字符),所以输出的a,b值之间有一个空格。第五行的printf语句格式控制串中加入的是非格式字符逗号, 因此输出的a,b值之间加了一个逗号。第六行的...

Global site tag (gtag.js) - Google Analytics