鱼C论坛

 找回密码
 立即注册
查看: 2134|回复: 7

[已解决]请问小甲鱼出的这个题的参考代码是不是错了

[复制链接]
发表于 2023-4-5 17:27:26 | 显示全部楼层 |阅读模式

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

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

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", i);

        return 0;
}//这个代码得出答案是87625999,然而这个数不属于质数,它是由71,839,1471相乘而来.
//题目是求600851475143 的最大质数因子(本人萌新,大佬勿喷)
最佳答案
2023-4-5 17:40:07
确实,这个代码的答案是错误的。这里提供一个修改后的正确的代码:

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

  3. int main() {
  4.     long long num = 600851475143;
  5.     long long maxPrimeFactor = 0;
  6.     long long i;

  7.     // 对2进行特殊处理
  8.     while (num % 2 == 0) {
  9.         maxPrimeFactor = 2;
  10.         num /= 2;
  11.     }

  12.     // 处理其他奇数因子
  13.     for (i = 3; i <= sqrt(num); i += 2) {
  14.         while (num % i == 0) {
  15.             maxPrimeFactor = i;
  16.             num /= i;
  17.         }
  18.     }

  19.     // 如果num大于2,说明num是一个大于sqrt(num)的质数
  20.     if (num > 2) {
  21.         maxPrimeFactor = num;
  22.     }

  23.     printf("%lld\n", maxPrimeFactor);

  24.     return 0;
  25. }
复制代码

这个代码会得到正确的答案:6857。这是因为600851475143的质数因子是71、839、1471和6857,而最大的质数因子是6857。
@}4M48WY`4M8@NZ{TXMB]3T.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-5 17:40:07 | 显示全部楼层    本楼为最佳答案   
确实,这个代码的答案是错误的。这里提供一个修改后的正确的代码:

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

  3. int main() {
  4.     long long num = 600851475143;
  5.     long long maxPrimeFactor = 0;
  6.     long long i;

  7.     // 对2进行特殊处理
  8.     while (num % 2 == 0) {
  9.         maxPrimeFactor = 2;
  10.         num /= 2;
  11.     }

  12.     // 处理其他奇数因子
  13.     for (i = 3; i <= sqrt(num); i += 2) {
  14.         while (num % i == 0) {
  15.             maxPrimeFactor = i;
  16.             num /= i;
  17.         }
  18.     }

  19.     // 如果num大于2,说明num是一个大于sqrt(num)的质数
  20.     if (num > 2) {
  21.         maxPrimeFactor = num;
  22.     }

  23.     printf("%lld\n", maxPrimeFactor);

  24.     return 0;
  25. }
复制代码

这个代码会得到正确的答案:6857。这是因为600851475143的质数因子是71、839、1471和6857,而最大的质数因子是6857。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 17:57:11 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:31:26 | 显示全部楼层
这是第几节课的题目呢?

我找了一圈没有看到这道题丫?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:37:02 | 显示全部楼层
小甲鱼 发表于 2023-4-5 20:31
这是第几节课的题目呢?

我找了一圈没有看到这道题丫?

热乎的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-5 20:50:22 | 显示全部楼层
小甲鱼 发表于 2023-4-5 20:31
这是第几节课的题目呢?

我找了一圈没有看到这道题丫?

带你学c带你飞  第一阶段考核题的答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:53:43 | 显示全部楼层
dogdoggodlike 发表于 2023-4-5 20:50
带你学c带你飞  第一阶段考核题的答案

感谢指出,已经修正~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:55:34 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 15:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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