半路学习 发表于 2021-2-19 20:37:49

求助!求最大质数因子代码理解不了

代码如下:
#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;
}

人中仙 发表于 2021-2-19 23:28:20

#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-20 09:04:39

人中仙 发表于 2021-2-19 23:28


是不是要同时满足内部循环和外部循环的跳出条件才会执行printf,只满足其中一个会执行printf吗?

人中仙 发表于 2021-2-20 09:36:02

半路学习 发表于 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:37:04

半路学习 发表于 2021-2-20 09:04
是不是要同时满足内部循环和外部循环的跳出条件才会执行printf,只满足其中一个会执行printf吗?

是同时满足的
页: [1]
查看完整版本: 求助!求最大质数因子代码理解不了