1

基本的に、私は projecteuler.net で 3 番目の質問を完了しようとしています。この例では、このプログラム (C で記述) が 5 7 13 29 の素因数ツリーを正確に返す番号 13195 が得られますが、質問番号 600851475143 を入力しても何も起こりません。また、約 1 年前に Python で同様のプログラムを作成し、600851475143 の因子ツリーを解決しました。使用しているデータ型に関係していると思いますが、それに関する信頼できる情報源を見つけることができず、 floats/doubles/big thingies で modulo を行う方法。

ありがとう、

クレメント

コード:

//
//  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 ビットlongまたはlong longタイプがある可能性があります。

この%演算子は C の整数型でのみ機能するため、floatorに使用しようとしても機能しdoubleません。

あなたが持っている別のオプションは、ある種の「大きな数」ライブラリを使用することです。このレベルの Project Euler の問題に十分対応できる、独自の単純なものを作成することは確かに可能です。

于 2013-02-11T23:38:13.947 に答える