python中判断素数的几种方式

文章介绍了三种使用Python判断一个正整数是否为素数的方法:一是通过循环2到n-1并检查余数;二是优化后的循环,只到m/2;三是进一步优化,利用平方根减少计算量。每种方法都包含逻辑判断和退出条件,用于确定输入数字的素数状态。
摘要由CSDN通过智能技术生成

素数的定义:素数n只能被1和它本身整除

换句话说:素数不能被2~n-1间的任意一个数整除

方法一、用2~n-1依次做求余运算(优点:容易想到

定义一个标志变量yes

#定义一个标志变量,初始化为1,默认n是素数
yes=1
for i in range(2,n):
    if n%i==0:
       yes=0
       break

如果yes=1没有变化,则说明在2~n-1之间没有一个数可以整除n,则可以判断n是素数

完整代码

#s素数判断代码——方式一
n = int(input("输入一个正整数:"))
yes= 1
for i in range(2,n):
    if n%i==0:
       yes=0
       break
if yes:
   print(n,'是素数')
else:
   print(n,'不是素数')
#素数判断方式二
m = int(input('输入一个正整数:'))
i =2
while i < m:
     if m%i==0:
        break
     i+=1
if i>m:
   print(m,'是素数')
else:
   print(m,'不是素数')

方法二——方法一的第二种形式的化简,可以在2~m/2之中判断

#判断素数
m = int(input('请输入一个正整数:'))
i =2
k = m/2
while i <=k:
      if m%i==0
         break
      i+=1
if i>k:
   print(m,'是素数')
else:
   print(m,'不是素数')

方法三-再次化简

#判断素数
from math import sqrt
n = int(input('请输入一个正整数:'))
i = 2
k = int(sqrt(n))
while i <=k:
      if n%i==0:
         break
      i+=1
if i >k:
   print(n,'是素数')
else:
   print(n,'不是素数')

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
判断是否是素数的代码有很多种写法,以下是其几种常见的写法: 1. 基本判断法:从2到n-1逐个判断n是否能被整除,如果都不能整除,则n为素数。 ```python def is_prime(n): if n < 2: return False for i in range(2, n): if n % i == 0: return False return True ``` 2. 优化判断法1:只需要从2到n的平方根进行判断即可,因为如果n可以被大于它平方根的数整除,那么一定可以被小于它平方根的数整除。 ```python import math def is_prime(n): if n < 2: return False for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True ``` 3. 优化判断法2:对于偶数可以直接判断,因为偶数只有2是素数,其他都是合数。 ```python import math def is_prime(n): if n < 2: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True ``` 4. 埃拉托斯特尼筛法:从2开始,将每个素数的倍数都标记成合数,直到筛完所有小于n的素数,剩下的就是素数。 ```python def eratosthenes(n): is_prime = [True] * (n + 1) is_prime[0] = False is_prime[1] = False for i in range(2, int(n ** 0.5) + 1): if is_prime[i]: for j in range(i * i, n + 1, i): is_prime[j] = False return [i for i in range(n + 1) if is_prime[i]] print(eratosthenes(100)) ``` 5. 线性筛法:相比于埃拉托斯特尼筛法,可以将每个合数只筛选一次,时间复杂度更低。 ```python def linear_sieve(n): is_prime = [True] * (n + 1) primes = [] for i in range(2, n + 1): if is_prime[i]: primes.append(i) for j in range(len(primes)): if i * primes[j] > n: break is_prime[i * primes[j]] = False if i % primes[j] == 0: break return primes print(linear_sieve(100)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值