介绍
此脚本计算第 N 个质数。在课程工作中,演示了 Python 类,我对这个主题非常满意,因为它与 C++ 非常相似。我所做的一项优化是跳过对偶数的检查。根据定义,偶数永远不可能是质数,因为它们总是能被 2 整除。
什么是质数?质数是大于 1 且只能被 1 或其本身整除的数字。数字 2 是质数,因为它大于 1 并且只能被 2 整除。出于同样的原因,3、5 和 7 也是质数。
使用代码
若要使用该代码,请创建一个具有所需第 N个质数的对象。计算质数的基本思想是从 2 循环到数字 1。该脚本使用外部循环和内部循环来实现此目的。外循环计算已发现多少个素数,并在发现第 N 个素数时退出。内部循环由两个数字初始化。第一个数字是“”,表示要检查是否为素数的数字。第二个数字是从 2 到素数减 1 的计数器。为了测试素数,第二个计数器是模数除以第一个计数器。如果有余数,则该数字是素数的候选数,计数器将增加,然后重新检查。如果没有余数,则该数字不是素数的候选者。当一个数字被拒绝时,第一个优化会脱离内部循环。第二个优化确保只测试奇数。CPrime
i
例如:
python"><span style="color:black"><span style="background-color:#fbedbb"><span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> Calculate the 10th prime number</em></span>
MyPrime = CPrime(10)
<span style="color:blue">print</span>(MyPrime.GetPrime())</span></span>
整个脚本:
python"><span style="color:black"><span style="background-color:#fbedbb"><span style="color:purple">"""</span><span style="color:purple">
This script calculates a prime number
"""</span><span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> Base class</em></span>
<span style="color:blue">class</span> CCalculate:<span style="color:blue">def</span> __init__(self):<span style="color:blue">pass</span><span style="color:blue">def</span> IsEven(self, num):<span style="color:blue">if</span> num % 2 == 0:<span style="color:blue">return</span> <span style="color:blue">True</span><span style="color:blue">return</span> <span style="color:blue">False</span><span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> Derived class</em></span>
<span style="color:blue">class</span> CPrime(CCalculate):<span style="color:blue">def</span> __init__(self, nthPrime):self.nthPrime = nthPrime<span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> return the nth Prime number</em></span><span style="color:blue">def</span> GetPrime(self):nthPrime = self.nthPrimecounter = 0i = 2<span style="color:blue">while</span> counter < nthPrime:bPrime = <span style="color:blue">True</span>j = 2<span style="color:blue">while</span> j < i:<span style="color:blue">if</span> i % j == 0:bPrime = <span style="color:blue">False</span><span style="color:blue">break</span><span style="color:blue">else:</span>j = j + 1<span style="color:blue">if</span> bPrime <span style="color:blue">is</span> True:counter = counter + 1<span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> Increase the number</em></span>i = i + 1<span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> if the next iteration does not finish the loop or</em></span><span style="color:#008000"><em>#</em></span><span style="color:#008000"><em> it is an even number, then increase it to make it odd</em></span><span style="color:blue">if</span> counter < nthPrime <span style="color:blue">and</span> self.IsEven(i) <span style="color:blue">is</span> True:i = i + 1<span style="color:blue">return</span> i - 1</span></span>