黑马程序员技术交流社区
标题:
这是我以前解答关于C语言分解质数的问题
[打印本页]
作者:
koukou
时间:
2014-6-6 20:50
标题:
这是我以前解答关于C语言分解质数的问题
#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的因数
}
作者:
徐开伟
时间:
2014-6-6 21:19
顶一个 多谢分享
作者:
koukou
时间:
2014-6-7 17:16
徐开伟 发表于 2014-6-6 21:19
顶一个 多谢分享
一起努力
作者:
baby14
时间:
2018-9-16 12:00
多谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2