1

基本上,我一直在尝试完成 projecteuler.net 上的第三个问题。该示例为我提供了数字 13195,该程序(用 C 编写)准确地返回了 5 7 13 29 的素数树,但是当我输入问题编号 600851475143 时,没有任何反应。大约一年前,我还在 Python 中制作了一个类似的程序,它解决了 600851475143 的因子树。我认为这与我正在使用的数据类型有关,但我找不到可靠的信息来源,并且如何用浮点数/双精度数/大东西做模数。

谢谢,

克莱门特

代码:

//
//  main.c
//  Project Euler Question 3
//
//  Created by Cwbh on 2/11/13.
//  Copyright (c) 2013 Cwbh. All rights reserved.
//

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

int is_prime(int x);

int main(int argc, const char * argv[])
{
    int pft[100];
    int number;
    int pointerloc = 0;

    printf("Enter the number to find the Prime Factor Tree of: ");
    scanf("%d", &number);

    if (is_prime(number) == 0) {
        for (int i = 2; i < number; i++) {
            if (number%i == 0 && is_prime(i) == 1) {
                pft[pointerloc] = i;
                pointerloc++;
            }
        }
    }else{
        printf("You've entered a prime number to begin with!");
    }

    for (int i = 0; i < pointerloc; i++) {
        printf("%d\n",pft[i]);
    }


    return 0;
}

int is_prime(int x){
    int prime = 1;

    for (int i = 2; i < x; i++) {
        if (x%i == 0) {
            prime = 0;
            break;
        }
    }

    return prime;

}
4

1 回答 1

4

它看起来像是int您机器上的 32 位类型。这意味着 600851475143 不适合(32 位整数中可表示的最大数字是 4294967295)。使用 64 位类型应该没问题。您可以使用uint64_tfrom stdint.h,或者您的机器可能有 64 位longlong long类型。

%运算符仅适用于 C 中的整数类型,因此尝试将其用于 afloatdouble将不起作用。

您拥有的另一个选择是使用某种“大数字”库。您当然可以编写自己的简单程序来解决这一级别的欧拉计划问题。

于 2013-02-11T23:38:13.947 回答