鱼C论坛

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

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

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

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

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

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

  3. int main()
  4. {
  5.         long long i, j, k, l, num = 600851475143;
  6.         _Bool flag = 1;

  7.         for (i = 2, j = num/i; flag != 0; i++, j = num/i, flag = 1)
  8.         {
  9.                 if (i * j == num)//这有什么作用啊
  10.                 {
  11.                         k = sqrt((double)j);
  12.                         for (l = 2; l <= k; l++)
  13.                         {
  14.                                 if (j % l == 0)
  15.                                 {
  16.                                         flag = 0;
  17.                                         break;
  18.                                 }
  19.                         }
  20.                         if (flag)
  21.                         {
  22.                                 break;
  23.                         }
  24.                 }
  25.         }

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

  27.         return 0;
  28. }
复制代码

问题1.这个if(i*j==num)有什么作用啊?? 怎么感觉是多余的
问题2.我用的code block该如何执行小甲鱼说的操作
小甲鱼说的 ”另外由于数字比较大,需要 long long 以上整型才能存储,而 long long 是 C99 新增加的类型,所以在编译的时候应该加上 -std=c99,即告诉 GCC 使用 C99 标准进行编译。另外 math.h 头文件需要加上 -lm 才能正常编译”
  1. 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 的因子 ...
  1.                 if (i * j == num)
复制代码

        这一句的意思是,如果 i 和 j 是 num 的因子,就进入 if 语句块,进一步判断 j 是否是一个质数。
      
小甲鱼最新课程 -> https://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 选项。
小甲鱼最新课程 -> https://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)
纯属猜测,麻烦大手子解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 12:01:01 | 显示全部楼层    本楼为最佳答案   
zhangfeiwen 发表于 2021-1-18 11:41
原问题是2. 编写一个程序,求解 600851475143 的最大质数因子是多少?
“不就说明 i 和 j 是 num 的因子 ...
  1.                 if (i * j == num)
复制代码

        这一句的意思是,如果 i 和 j 是 num 的因子,就进入 if 语句块,进一步判断 j 是否是一个质数。
      
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

想明白了 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 07:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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