鱼C论坛

 找回密码
 立即注册
查看: 1353|回复: 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
确实,这个代码的答案是错误的。这里提供一个修改后的正确的代码:
#include <stdio.h>
#include <math.h>

int main() {
    long long num = 600851475143;
    long long maxPrimeFactor = 0;
    long long i;

    // 对2进行特殊处理
    while (num % 2 == 0) {
        maxPrimeFactor = 2;
        num /= 2;
    }

    // 处理其他奇数因子
    for (i = 3; i <= sqrt(num); i += 2) {
        while (num % i == 0) {
            maxPrimeFactor = i;
            num /= i;
        }
    }

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

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

    return 0;
}
这个代码会得到正确的答案:6857。这是因为600851475143的质数因子是71、839、1471和6857,而最大的质数因子是6857。
@}4M48WY`4M8@NZ{TXMB]3T.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

int main() {
    long long num = 600851475143;
    long long maxPrimeFactor = 0;
    long long i;

    // 对2进行特殊处理
    while (num % 2 == 0) {
        maxPrimeFactor = 2;
        num /= 2;
    }

    // 处理其他奇数因子
    for (i = 3; i <= sqrt(num); i += 2) {
        while (num % i == 0) {
            maxPrimeFactor = i;
            num /= i;
        }
    }

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

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

    return 0;
}
这个代码会得到正确的答案:6857。这是因为600851475143的质数因子是71、839、1471和6857,而最大的质数因子是6857。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 17:57:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我找了一圈没有看到这道题丫?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

热乎的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

带你学c带你飞  第一阶段考核题的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢指出,已经修正~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-5 20:55:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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