`
EmmaZhao
  • 浏览: 33461 次
  • 性别: 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
分享到:
评论

相关推荐

    C语言判断一个数是否为素数

    ### C语言判断一个数是否为素数 #### 知识点概述 本篇文章将详细介绍如何使用C语言来判断一个正整数是否为素数。在数学领域,素数(Prime Number)是指仅能被1和自身整除的大于1的自然数。例如,2、3、5、7等都是...

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

    判断一个数是否为素数的方法有很多,从最基本的尝试除法到更复杂的算法。 ##### 1. 最简单的朴素方法 这是最直观的方法,即遍历从2到n-1的所有数字,看是否存在能整除n的数。如果存在,则n不是素数;否则,n是素数...

    判断素数_yes_素数的判断_

    最直观的方法是,从2到m-1遍历所有整数,如果m能被其中任意一个数整除,则m不是素数;否则,m是素数。这种方法虽然简单,但效率较低,特别是对于大数,计算时间会显著增加。 2. **优化的暴力枚举法(试除法)**: ...

    判断一个数是否为素数.rar

    在计算机科学中,判断一个数是否为素数是一项基础但重要的任务。素数是指大于1且只有1和其本身两个正因数的自然数。它们是构建其他所有正整数的基础,因为每个合数(非素数)都可以表示为两个或多个素数的乘积。在...

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

    本文将探讨几种常见的素数判断方法的代码实现,并对其时间复杂度进行分析。 首先,最朴素的方法是直接遍历从2到n-1的所有整数,检查是否有数能够整除n。如果都找不到能整除n的数,则n为素数。这种方法的时间复杂度...

    c# 判断一个数是不是素数

    在C#中判断一个数是否为素数是常见的算法问题,尤其对于初学者来说,这是一个很好的练习基础算法和逻辑思维的机会。下面我们将深入探讨如何使用C#来实现这个功能。 首先,我们需要理解基本的数学概念。素数是大于1...

    python编程-100以内素数几种编程求解方法.docx

    Python 编程 -100 以内素数几种编程求解方法 Python 编程语言提供了多种方法来解决 100 以内的素数问题。下面我们将逐步讲解每种方法。 方法一:简单遍历 在第一个方法中,我们使用 for 循环来遍历从 2 到 100 的...

    PrimeNumTest.rar_判断一个数是否为质数

    判断质数的方法有很多种,这里我们将讨论几种常见的算法: 1. **基础的质数筛选法**:对于较小的数字,我们可以简单地从2开始到这个数的平方根进行遍历,如果存在任何因子,那么该数就不是质数。例如,如果n=23,...

    判断一个数是否为素数.txt

    判断一个数是否为素数的传统方法是试除法。试除法的基本思想是从2开始试除,一直到sqrt(n)(即数n的平方根)。如果在这个过程中找到能整除n的数,则n不是素数;如果试除结束后仍未找到这样的数,则n是素数。这是因为...

    Python 判断一个数是否为素数.docx

    在Python中,判断一个数是否为素数可以通过多种方法实现。下面将详细介绍一种简单且较为高效的方法,并对其进行逐步解析。 ### 代码实现详解 #### 函数定义 ```python def is_prime(number): ``` 这里定义了一个...

    判断素数(Vector)_判断素数_

    在这个话题中,我们将深入探讨如何使用C++语言来判断一个数是否为素数,并分析提供的文件名可能涉及的内容。 首先,让我们看一下如何编写一个C++程序来判断素数。在描述中提到的"判断素数(Vector)"可能意味着这个...

    python判断素数的几种方式

    在Python编程语言中,判断一个正整数是否为素数是一项常见的任务,素数是大于1且只有1和其本身两个正因数的自然数。本文将深入探讨几种不同的Python方法来实现这一功能。 1. **基础循环法** 最简单的方法是通过...

    原型的函数prime,用来判断整数n是否为素数

    为了实现`bool prime(int n)`函数,我们需要一种有效的方法来判断一个整数是否为素数。以下是一种常用的方法: - 首先检查`n`是否小于2,若是则返回`false`,因为小于2的数不是素数。 - 检查`n`是否等于2或3,若是则...

    python编程-100以内素数几种编程求解方法.pdf

    Python 编程——100 以内素数几种编程求解方法 Python 编程中,求解 100 以内的素数有多种方法,本文将介绍四种不同的方法来解决这个问题。 方法一:简单遍历 在方法一中,我们使用了一个简单的遍历算法,遍历从 ...

    素数的判断的方法,适合程序设计

    下面将介绍几种常用的素数判断方法,并分析它们的时间复杂度。 ##### 1. 普通方法:逐个检查法 该方法是最直观的一种方法,即从2开始到n-1,逐个检查n是否能被整除。 - **时间复杂度**:O(n),当n较大时效率非常低...

    质数的判断条件.zip

    判断一个数是否为质数的方法多种多样,以下介绍几种常见的判断条件和算法: 1. **基本检查法**:对于一个正整数n,如果n小于2,那么它不是质数;如果n等于2,它是唯一的偶数质数;如果n大于2且能被2整除,那么n不是...

    编写一个程序,从键盘输入一个偶数,输出该偶数写成的两个素数之和

    判断一个数是否为素数,通常的方法是试除法,即用小于等于该数平方根的所有自然数去除该数,如果都不能整除,则该数为素数。 ### 程序逻辑分析 给定代码片段使用了C++语言,其主要逻辑如下: 1. **输入验证**:...

Global site tag (gtag.js) - Google Analytics