python素数判断代码_python素数判断/素因数分解 简单易懂的方法,和程序进阶(质数分解/质因数分解)...

本文详细介绍了Python中如何判断一个数是否为素数,以及如何进行素因数分解。基础方法包括从2开始遍历到n-1判断余数,进阶版增加了对输入数据类型的验证和错误处理。同时,文章还提供了素因数分解的实现,通过不断寻找并移除素因数直至n变为1。进阶版同样考虑了输入错误的处理。
摘要由CSDN通过智能技术生成

本文介绍偏向新手,解释比较详细,如果是大佬嫌我前面的知识补充和思路分析烦人的话,可以直接跳过去看代码部分。

每个问题都包含基础方法(重点讲解核心问题),和进阶版本(完善程序)

素数判断基础方法1.0

知识补充:

1)素数是除了1和它本身不能被其他正整数整除的正整数,1不是素数也不是合数。

2) %是Python取除法余数的计算,例如5%2=1

3)else语句的特殊用法:如果else和循环语句开头对齐,说明当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。

思路分析:

我们要判断一个正整数n是不是一个素数,可以从2开始依次检查,到n-1为止,看能不能找到它除了1和本身外的一个因数。如果找到了,那他就不是素数。如果找不到他就是素数。

用for in循环,配合range函数实现由2到n-1的检索,i表示每一个可能存在的因数

对于每一个可能的因数i,使用if条件判断。判断标准是n除以i是否有余数

如果找到,说明这个数不是素数,break语句跳出循环

如果从2到n-1都没有找到因数,则说明是素数,结束循环并且执行else语句

代码参考

n=int(input("请输入整数:")) #输入整数,并且转化为整数类型

for i in range(2,n): #for in 循环(range函数左取右不取,从2到n-1)

b=n%i # %表示取得除法计算的余数

if b==0: #判断标准,n除以这个数,是否有余数

print("不是质数")

break

else: # else放在这个为止表示如果上面的 for in 循环当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。

print("是质数") #没有碰到break语句则执行else语句

素数判断程序进阶2.0

在基础版本我们忽略了如果输入的是"1",是"2.5",甚至是"火鸡"等其他类型数据输入时的处理

输入了n=1,或者n等于一个小数的情况可以用if条件判断来处理,如果输入的不是1,而且大于0,而且数据类型数型数int则运行程序,不然的话就执行相应的输入提示

如果输入了不是数字的数据类型例如"狮子",则会报错ValueError

所以在最外面套上错误检验的 try except语句来解决

它的格式是

try:

不报错执行的程序

except+报错类型:

报错时执行的程序

try: #不报错时候执行程序

n=int(input("请输入整数:"))

if n !=1 and type(n)==int and n>1: #对输入数据的条件判断 ,如果是正整数就执行程序

for i in range(2,n):

b=n%i

if b==0:

print("不是质数")

break

else:

print("是质数")

elif n==1: #如果是1的提示

print("1既不是素数又不是合数")

else: print("请输入正确的正整数") #如果是其他数值类型的提示

except ValueError:

print("请输入正确的正整数") #报错时候的输入提示

素因数分解基础方法1.0

知识补充(123上面的素因数判断补充过了,看过了的朋友可以跳过)

1)素数是除了1和它本身不能被其他正整数整除的正整数,1不是素数也不是合数。

2) %是Python取除法余数的计算,例如5%2=1

3)else语句的特殊用法:如果else和循环语句开头对齐,说明当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。

4)//是python的整除计算,例如7//2=3

5)while True 会使程序开启不限次数的循环,需要通过设置条件来跳出循环。

思路分析:

将一个整数n分解成素因数,例如输入20,输出[2,2,5]意味着我们需要将n的素因数从小到大一个个找出来放进一个列表里面。

找第一个素因数可以用for in循环和range函数实现,从2到n检索。对于每一轮循环中的i,通过n除以i余数是否为0来判断是否是素因数,如果是素因数则放入列表。

以此基础为了找齐n所以因数,需要在外面套一层while循环,并且在每次找到素因数之后改变n的值,

例如开始n=20 list1=[],

第一轮while循环 n=10 素因数[2],

第二轮n=5 素因数[2,2],

第三轮n=1 素因数[2,2,5]

第四轮n=1不符合条件,由于for in循环没有碰到break,则执行与for in 循环对其的while语句,跳出while循环。

代码参考

n=int(input("请输入整数:")) #输入一个整数

list1=[] #定义一个空列表存放素因数

while True: #开启while循环

for i in range(2,n+1): #range函数左取右不取,从2检索到n

b=n%i #计算余数

if b ==0: #条件判断,如果余数是0,i就是n的一个素因数

list1.append(i) #将这个素因数放进列表

n=n//i #将n的值除以这个素因数,即将这个素因数去掉

break #结束循环,进入下一轮while循环

else:

break #若for in 循环没有执行break,即n的素因数已经取完,则结束while循环

print(list1)

素因数分解方法进阶2.0

对于基础版本1.0里面没有处理的问题,输入1或者其他不是整数的数值时候的解决方法同上面素数判断的进阶版讲解的内容一样,使用if条件判断,type语句,和try except语句可以实现

try: #不报错时候执行程序

n=int(input("请输入整数:"))

list1=[]

if n !=1 and type(n)==int and n>1: #如果输入的是不是1的正整数则进行素因数分离

while True:

for i in range(2,n+1):

b=n%i

if b ==0:

list1.append(i)

n=n//i

break

else:

break

print(list1)

elif n==1: #如果是1的提示

print("1没有素因数")

else: print("请输入正确的正整数") #如果是其他数值类型的提示

except ValueError:

print("请输入正确的正整数") #报错时候的输入提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值