python中prime_在Python中是否为Prime

质数在诸如密码学的许多应用中起着核心作用。因此,有必要在各种应用程序中使用Python程序检查素数。质数是一个除自身以外没有其他任何因素的数字。下面将看到可以找出给定数字是否为质数的程序。

方法

我们采用以下方法来确定数字是否为质数。开始时检查是否为正。因为只有正数可以是质数。

我们将数字除以所有数字,并将其除以给定数字小于2的一个数字。

如果此范围内任何数字的余数变为零,则它不是质数。

示例x = 23

if x > 1:

for n in range(2, x):

if (x % n) == 0:

print(x, "is not prime")

print(n, "times", x // n, "is", x)

break

else:

print(x, "is a prime number")

else:

print(x, "is not prime number")

输出结果

运行上面的代码给我们以下结果-23 is a prime number

检查表格6i + 1

所有大于6的质数都可以6i + 1的形式表示。在这里,我从1开始,以整数继续。在下面的示例中,我们将检查数字是否可以以6i + 1的形式表示,方法是将其除以6并检查一个提醒是否为1。因此,将决定数字是否为质数。另外,我们需要检查ai值是否等于给定数字的平方根。

示例def CheckPrime(n):

# Check for cases of 2 and 3

if (n <= 1):

return False

if (n <= 3):

return True

# skip checking middle five numbers in the loop

if (n % 2 == 0 or n % 3 == 0):

return False

i = 5

while (i * i <= n):

if (n % i == 0 or n % (i + 2) == 0):

return False

i = i + 6

return True

# Check for inputs

if (CheckPrime(31)):

print(" true")

else:

print(" false")

if (CheckPrime(25)):

print(" true")

else:

print(" false")

输出结果

运行上面的代码给我们以下结果-true

false

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
判断一个数是否是质数(素数)是一个常见的问题。以下是一些可以降低 `is_prime` 函数时间复杂度的方法: 1. 只需要判断一个数 n 是否是质数,就只需要判断 n 是否能被 2 到 sqrt(n) 之间的数整除。因为如果 n 不能被这些数整除,那么它肯定是质数了。这个方法可以减少循环次数,提高效率。 ```python def is_prime(n): if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True ``` 2. 可以利用埃氏筛法(Sieve of Eratosthenes)预处理出小于等于 n 的所有质数,然后再用判断函数判断 n 是否是其之一。这个方法的时间复杂度比较低,但是需要先预处理出所有质数,对于大的 n 值会比较占用内存。 ```python def sieve_of_eratosthenes(n): primes = [True] * (n + 1) primes[0] = primes[1] = False for i in range(2, int(n ** 0.5) + 1): if primes[i]: for j in range(i * i, n + 1, i): primes[j] = False return [i for i in range(n + 1) if primes[i]] primes = sieve_of_eratosthenes(1000000) def is_prime(n): if n < 2: return False return n in primes ``` 3. 判断一个数是否是质数的时间复杂度无法降低到常数级别,但是可以通过一些方法来减少判断次数。比如,可以先判断 n 是否是偶数,如果是偶数则直接返回 False,然后再用上面的方法判断是否是质数。这个方法可以省去一半的判断次数。 ```python def is_prime(n): if n < 2 or (n > 2 and n % 2 == 0): return False for i in range(3, int(n ** 0.5) + 1, 2): if n % i == 0: return False return True ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值