鱼C论坛

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

[已解决]第一阶段测试题中的求解其最大质数因子是多少?

[复制链接]
发表于 2021-1-17 21:43:11 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
#include <math.h>

int main()
{
        long long i, j, k, l, num = 600851475143;
        _Bool flag = 1;

        for (i = 2, j = num/i; flag != 0; i++, j = num/i, flag = 1)
        {
                if (i * j == num)//这有什么作用啊
                {
                        k = sqrt((double)j);
                        for (l = 2; l <= k; l++)
                        {
                                if (j % l == 0)
                                {
                                        flag = 0;
                                        break;
                                }
                        }
                        if (flag)
                        {
                                break;
                        }
                }
        }

        printf("%lld\n", j);

        return 0;
}
问题1.这个if(i*j==num)有什么作用啊?? 怎么感觉是多余的
问题2.我用的code block该如何执行小甲鱼说的操作
小甲鱼说的 ”另外由于数字比较大,需要 long long 以上整型才能存储,而 long long 是 C99 新增加的类型,所以在编译的时候应该加上 -std=c99,即告诉 GCC 使用 C99 标准进行编译。另外 math.h 头文件需要加上 -lm 才能正常编译”
gcc -std=c99 -lm test.c && ./a.out
麻烦各位大手子啦
最佳答案
2021-1-18 12:01:01
zhangfeiwen 发表于 2021-1-18 11:41
原问题是2. 编写一个程序,求解 600851475143 的最大质数因子是多少?
“不就说明 i 和 j 是 num 的因子 ...
                if (i * j == num)
        这一句的意思是,如果 i 和 j 是 num 的因子,就进入 if 语句块,进一步判断 j 是否是一个质数。
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-17 23:38:07 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-18 01:30 编辑

      如果 i * j == num 了,不就说明 i 和 j 是 num 的因子吗,据此可以判定,num 肯定不是质数,这就是这个判断的作用和意义。可见,其作用非常关键,不可或缺!
      小甲鱼说的情况适合 Linux 系统,在 Windows 下可以全部忽视,只是整型数必须要定义成 long long,这一点是必须的。
      在 Windows 系统上, long long 在 scanf() 和 printf() 中对应的格式描述符是 "%I64d",这一点比较特别,一定要注意,否则,用 "%lld" 是绝对要出错的。
      如果是在 Windows 下,程序正常编译就行,即便使用了 math 库,只需要包含 <math.h> 头文件,编译的时候,不需要使用 -lm 选项。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 11:41:19 | 显示全部楼层
jackz007 发表于 2021-1-17 23:38
如果 i * j == num 了,不就说明 i 和 j 是 num 的因子吗,据此可以判定,num 肯定不是质数,这就是 ...

原问题是2. 编写一个程序,求解 600851475143 的最大质数因子是多少?
“不就说明 i 和 j 是 num 的因子吗,据此可以判定,num 肯定不是质数”
num不就是这个600851475143吗
你的意思是需要一个if判断来验证题目给出的数是不是质数?
我想问下,这个long long有整数的意思吗?
我的想法是
这个if是确保i和j都是整数的情况下,相乘得出来的数还是num并不会因为整型的原因而改变
因为J=NUM/i 如果不能整除会强型变成整数 例如(j=5/2=2 结果j*2=4 <5)
纯属猜测,麻烦大手子解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 12:01:01 | 显示全部楼层    本楼为最佳答案   
zhangfeiwen 发表于 2021-1-18 11:41
原问题是2. 编写一个程序,求解 600851475143 的最大质数因子是多少?
“不就说明 i 和 j 是 num 的因子 ...
                if (i * j == num)
        这一句的意思是,如果 i 和 j 是 num 的因子,就进入 if 语句块,进一步判断 j 是否是一个质数。
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 13:56:32 | 显示全部楼层
jackz007 发表于 2021-1-18 12:01
这一句的意思是,如果 i 和 j 是 num 的因子,就进入 if 语句块,进一步判断 j 是否是一个质数 ...

想明白了 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 06:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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