c语言分解质因数的问题

来源:百度知道 编辑:UC知道 时间:2024/04/28 08:35:07
#include<stdio.h>
void main(){
int m,k;
printf("\n 请输入一个数: \n");
scanf("%d",&m);
printf("%d=",m);
for(k=2;k<m;){
if(m%k!=0){ //不能被k整除,就让k自加1
k++;
}
else{ //能被k整除,就让m等于被除后的数
printf("%d*",k);
m=m/k;
k=2; //让k重新等于2
}
}
printf("%d",k);
}

请问:if(m%k!=0){ //不能被k整除,就让k自加1
k++;
}

k=2; //让k重新等于2
这2句的意思
最好能一行一行的分析

这样注释的已经很好了啊
if(m%k!=0),说明还没找到因数,每次都是从2开始,逐渐递增,来找因数的
else,else部分,说明已经找到了因数,找到因数以后,先把因数打印出来,然后让m等于被除后的数,让k=2,也就是从2开始,继续递增找其他的因数啊

举个例子,你就明白了,比如15,你要对它进行分解质因数,该怎么做呢
先让k=2,发现15%2!=0了,说明2不是它的因数,让k++
k=3的时候,发现15%3==0了,说明3是它的一个因数,打印出3,让m=15/3=5,让k=2
5%2!=0,5%3!=0,5%4!=0,说明2,3,4,都不是5的因数,k继续自加
k=5,5%5==0了,说明5是5的因数,所以,打印5,m=5/5=1,k=2,这时,就会退出for循环了

逐行分析,见下面:
if(m%k!=0) //m不能被k整除,说明k不是m的因数
{
k++; //就让k自加1,判断下一个数是不是m的因数
}
else //m不能被k整除,说明k是m的一个因数
{
printf("%d*",k); //把这个因数k,打印出去
m=m/k; //从m中把因数k去掉,如果不去掉,下一个又会找到因数k的,那样就不对了
k=2;//让k重新等于2,也就是重新从2开始找m的因数
}

if(m%k!=0){ //不能被k整除,就让k自加1
k++;
}

这句话的意思就是说当k不是m的约数时,继续找下一个k(即比k多1的数),判断它是否是m的约数,是则输出不是则继续判断下一个。

k=2; //让k重新等于2

这个的意思是一个数如果找到了一个约数(比如2), 那么找下一个约数之前仍然应该从2开始找,因为他可能仍有2这个质因子,比如24=2*2*2*3,第一次找到2,第二次仍然要从2开始判断它是不是24的约数。

有不明白的地方再提出来吧~

if(m%k!=0){ //找出除1以外的除数,如果没有就加1,