C 数字600851475143中最大的素因子是什么?

C 数字600851475143中最大的素因子是什么?,c,C,我想知道我的代码中的错误是什么 int main () { long long int number, large_factor=0, i=2; printf ("Enter a number : "); scanf ("%ld", &number); while (number!=1) { if (number%i==0) { while (number%i==0) { printf ("%ld\t", i);

我想知道我的代码中的错误是什么

int main () {

long long int number, large_factor=0, i=2;

printf ("Enter a number : ");
scanf ("%ld", &number);

while (number!=1) {

    if (number%i==0) {

        while (number%i==0) {
            printf ("%ld\t", i);
            number/=i;
        }

        large_factor=i;
    }

    i++;
 }

printf ("\n\nThe largest prime factor is : %ld\n\n", large_factor);

return 0;
}

此代码对于较小的数字运行良好,但为什么对于较大的数字它会失败?

您的格式说明符处处都是long int,您应该使用%lld。

当我修复格式说明符时,它对于600851475143运行良好,给出了最大的素因子6857

一定还有别的事。假设您的编译器是兼容的long-long-int至少应该是64位整数,并且可以轻松地大到足以容纳该值

试一试

在顶部添加了include

它应该产生一个不小于9223372036854775807的值,可能就是这个确切的数字

在这里:


为什么要提示输入一个条目并使用scanf,而不仅仅将其作为命令行参数?用一个参数会更习惯。你们知道变量大小和最大值是什么吗?我不知道。调试器告诉您了什么?请尝试使用%lld而不是%ld检查编译器的警告设置。好的编译器对由回答的问题发出警告。打开所有警告-它可以节省您的时间并生成更好的代码。使用double将是一个坏主意,因为它们的性质不精确。使用double将是一个好主意!我使用了错误的格式说明符!我不知道为什么我总是犯这样的错误!
printf("long long int max : %lld\n",LLONG_MAX);
#include <limits.h>
#include <stdio.h>

int main () {

    printf("long long int max : %lld\n",LLONG_MAX);

    long long int large_factor=0, i=2;


    long long int number=600851475143;

    while (number!=1) {

        if (number%i==0) {

            while (number%i==0) {
                printf ("%lld\t", i);
                number/=i;
            }

            large_factor=i;
        }

        i++;
     }

    printf ("\n\nThe largest prime factor is : %lld\n\n", large_factor);

    return 0;
}