鱼C论坛

 找回密码
 立即注册
查看: 1832|回复: 4

[已解决]求助!求最大质数因子代码理解不了

[复制链接]
发表于 2021-2-19 20:37:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
#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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-20 09:04:39 | 显示全部楼层

是不是要同时满足内部循环和外部循环的跳出条件才会执行printf,只满足其中一个会执行printf吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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-02-20 093533.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是同时满足的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表