📜  Python程序检查一个数字是否是素数

📅  最后修改于: 2022-05-13 01:55:46.509000             🧑  作者: Mango

Python程序检查一个数字是否是素数

给定一个正整数 N,任务是编写一个Python程序来检查该数字是否为素数。
定义:素数是一个大于 1 的自然数,除了 1 和它自身之外没有正除数。前几个素数是 {2, 3, 5, 7, 11, ....}。

例子 :

解决这个问题的想法是使用 for 循环遍历从 2 到 (N/2) 的所有数字,并检查每个数字是否除以 N。如果找到任何除数的数字,则返回 false。如果我们在 2 和 N/2 之间没有找到任何除以 N 的数,那么这意味着 N 是素数,我们将返回 True。

以下是检查数字是否为素数的Python程序:

Python3
# Python program to check if
# given number is prime or not
  
num = 11
  
# If given number is greater than 1
if num > 1:
  
    # Iterate from 2 to n / 2
    for i in range(2, int(num/2)+1):
  
        # If num is divisible by any number between
        # 2 and n / 2, it is not prime
        if (num % i) == 0:
            print(num, "is not a prime number")
            break
    else:
        print(num, "is a prime number")
  
else:
    print(num, "is not a prime number")


Python3
from math import sqrt
# n is the number to be check whether it is prime or not
n = 1
  
# no lets check from 2 to sqrt(n)
# if we found any facto then we can print as not a prime number
  
# this flag maintains status whether the n is prime or not
prime_flag = 0
  
if(n > 1):
    for i in range(2, int(sqrt(n)) + 1):
        if (n % i == 0):
            prime_flag = 1
            break
    if (prime_flag == 0):
        print("true")
    else:
        print("false")
else:
    print("false")


输出
11 is a prime number

优化方法
我们可以做以下优化:

我们可以检查直到 √n,而不是检查直到 n,因为 n 的较大因子必须是已经检查过的较小因子的倍数。

现在让我们看看第一种优化方法的代码(即检查直到 √n)

Python3

from math import sqrt
# n is the number to be check whether it is prime or not
n = 1
  
# no lets check from 2 to sqrt(n)
# if we found any facto then we can print as not a prime number
  
# this flag maintains status whether the n is prime or not
prime_flag = 0
  
if(n > 1):
    for i in range(2, int(sqrt(n)) + 1):
        if (n % i == 0):
            prime_flag = 1
            break
    if (prime_flag == 0):
        print("true")
    else:
        print("false")
else:
    print("false")
输出
false

通过观察除 2 和 3 之外的所有素数的形式为 6k ± 1,可以进一步改进该算法。这是因为对于某个整数 k 和 i = -,所有整数都可以表示为 (6k + i) 1、0、1、2、3 或 4; 2 除 (6k + 0), (6k + 2), (6k + 4);和 3 个除法 (6k + 3)。所以更有效的方法是测试 n 是否能被 2 或 3 整除,然后检查 6k ± 1 形式的所有数字。(来源:维基百科)