计算第 N 个质数






4.41/5 (5投票s)
如何计算第 N 个质数
引言
我最近开始自学Python课程。这与我之前的所有文章大相径庭,那些文章都是用C++和MFC编写的。我想学习最新的编程技术,而Python是一个很好的选择。我仍然对Python非常陌生。课程中的一个环节要求我创建一个素数生成器。我对演示的代码不满意,所以决心对其进行优化。
这个脚本用于计算第N个素数。在课程学习过程中,演示了Python类,我对这个主题非常熟悉,因为它与C++非常相似。我所做的优化之一是跳过偶数的检查。根据定义,偶数永远不能是素数,因为它们总是可以被2整除。
什么是素数?素数是大于1且只能被1或自身整除的数。数字2是素数,因为它大于1且只能被2整除。3、5和7也是素数,原因相同。
背景
我正在使用的在线培训课程的网址是 https://www.youtube.com/watch?v=Vxw1b8f_yts。
Using the Code
要使用这段代码,创建一个CPrime
对象,并指定所需的第N个素数。计算素数的的基本思想是从2到该数减1进行循环。该脚本使用外层循环和内层循环来实现这一点。外层循环计算已经发现的素数数量,并在发现第N个素数时退出。内层循环初始化为两个数字。第一个数字是“i
”,代表要检查是否为素数的数字。第二个数字是从2到素数减1的计数器。为了测试是否为素数,将第二个计数器对第一个数字进行模运算除法。如果存在余数,则该数字是素数的候选者,计数器会增加并重新检查。如果没有余数,则该数字不是素数的候选者。第一次优化是在发现一个数不是素数时跳出内层循环。第二次优化确保只测试奇数。
例如
# Calculate the 10th prime number
MyPrime = CPrime(10)
print(MyPrime.GetPrime())
整个脚本
"""
This script calculates a prime number
"""
# Base class
class CCalculate:
def __init__(self):
pass
def IsEven(self, num):
if num % 2 == 0:
return True
return False
# Derived class
class CPrime(CCalculate):
def __init__(self, nthPrime):
self.nthPrime = nthPrime
# return the nth Prime number
def GetPrime(self):
nthPrime = self.nthPrime
counter = 0
i = 2
while counter < nthPrime:
bPrime = True
j = 2
while j < i:
if i % j == 0:
bPrime = False
break
else:
j = j + 1
if bPrime is True:
counter = counter + 1
# Increase the number
i = i + 1
# if the next iteration does not finish the loop or
# it is an even number, then increase it to make it odd
if counter < nthPrime and self.IsEven(i) is True:
i = i + 1
return i - 1
关注点
我学习了Python类,它与C++类有一些细微的差别。Python派生类的构造函数需要手动调用以进行基类初始化。
历史
- 2018年2月3日 - 脚本提交