#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句的意思
最好能一行一行的分析
分析:
f(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的因数
} |
|