zhangfeiwen 发表于 2021-1-17 21:43:11

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

#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
麻烦各位大手子啦

jackz007 发表于 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 选项。

zhangfeiwen 发表于 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)
纯属猜测,麻烦大手子解答{:10_254:}

jackz007 发表于 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 是否是一个质数。
      

zhangfeiwen 发表于 2021-1-18 13:56:32

jackz007 发表于 2021-1-18 12:01
这一句的意思是,如果 i 和 j 是 num 的因子,就进入 if 语句块,进一步判断 j 是否是一个质数 ...

想明白了 谢谢 {:10_256:}
页: [1]
查看完整版本: 第一阶段测试题中的求解其最大质数因子是多少?