求助!求最大质数因子代码理解不了
代码如下:#include<stdio.h>
int main()
{
long long int i=2, k;
printf("请输入一个数:");
scanf("%lld",&k);
while(k!=1)
{
while(k%i==0 )
{
if(k/i==1)
printf("最大质数因子为:%lld\n",i);
k=k/i;
}
i++;
}
return 0;
}
#include<stdio.h>
int main()
{
long long int i=2, k;
printf("请输入一个数:");
scanf("%lld",&k);
while(k!=1)
{
while(k%i==0 ) //k是i的整数倍,k不是质数 或 k==i
{
if(k/i==1) //k是i的1倍,即k与i相等,即这个数只与自己能整除,这个数就是最大的质因数
printf("最大质数因子为:%lld\n",i);//输出最大质因数
k=k/i; //如果此时k与i不等,k是i的大于等于2的倍数,k一定不是质数,k可以被拆成 i 与 k/i 两个整数的积
//又因为,i是从2开始递增的,故k/i是递减的,所以 第一个满足第14行的判断条件的 k/i 就会是最大的质因子,同时满足了最外层循环的跳出的条件,结束本程序
}
i++;//从2开始一个一个试
}
return 0; 人中仙 发表于 2021-2-19 23:28
是不是要同时满足内部循环和外部循环的跳出条件才会执行printf,只满足其中一个会执行printf吗? 半路学习 发表于 2021-2-20 09:04
是不是要同时满足内部循环和外部循环的跳出条件才会执行printf,只满足其中一个会执行printf吗?
如果满足k==i的条件,自然就满足了第14行的 k/i==1 , 执行到第16行时,k就会等于1,也就满足了外层循环跳出的条件。
k==i,那么k%i == 0,k/i == 1
半路学习 发表于 2021-2-20 09:04
是不是要同时满足内部循环和外部循环的跳出条件才会执行printf,只满足其中一个会执行printf吗?
是同时满足的
页:
[1]