|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
n=int(input('请输入一个正整数:'))
for i in range(2,n+1):
if n>=i:
if n%i ==0:
while n%i==0:
n=n/i
print(i)
在论坛上看到的,请问 while n%i==0 是怎么起到作用的呢,之前感觉没用,但是删了以后结果就是错的
首先,这个程序是为了将一个数字拆解为若干个质数乘积的形式。而while n%i == 0主要是用于判断原来的数字是否可以拆解为含几个相同的数字乘积的形式,例如24可拆为2*2*2*3,但少了while这一步,24就只能拆为2*3*4了。有些数字本身就是某一个质数的n次方,如4,8,9,而这些数字又可以作为某一个数字的因数,如32可以写为4*8。while这一步的本质就是在判断是否有某一个质数的n次方作为该数字的因数。若没有while,i在下一轮循环中就会变化,就判断不出来了。你可以去掉while试一下,输出结果中的那些非质数因数一定是某一个质数的n次方。
另外,再提几点:
1、if n >= i这句可以去掉。i在上一步的for中已经确定了范围(2,n+1),所以i绝对不可能大于n的,如果大于,在for那步就退出循环了。
2、if n%i == 0 这句也可以去掉。因为i在while那步也在判断这个条件。换句话说,只要if这句为真,那while那句也一定为真。你if下面只有一个while循环,所以直接交给while判断就好了。
3、这个不叫因数分解,因式分解是分解含字母的多项式的,你这只有一个数,显然这个叫法是不对的
|
|