2

C を学んでいて、Project Eulerの問題は楽しくて興味深い学習方法だと思っていました (数学についても考えさせられるので、1 石で 2 羽の鳥を殺すことになるでしょう) が、思わぬ障害にぶつかりました。

私は(私が思うに)数の最大の素因数を見つけるための(単純であれば)良いアルゴリズムを持っています。(私がテストした限り)動作しますが、PE の質問は最後の質問として 600851475143 を使用します。double などを使用しようとしましたが、モジュロ演算子と除算演算子の両方を見つけることができないようです。どんな助けでも大歓迎です。

添付のコードは、double (またはその他の型) で動作するようにする前のものです。

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

void main() {
    int target, divisor, answer;
    target = 375;
    divisor = 2;
    answer = -1;

    answer = factorise (target,divisor);

    printf("Answer to Euler Problem 3: %i\n", answer);
}

int factorise(number, divisor) {
    int div;
    while (divisor < number) {
        div = divide(number,divisor);
        if (div) {number = div;}
        else {divisor++;}
    }
    return divisor;
}

int divide(a,b) {
    if (a%b) {return 0;}
    else {return a/b;}
}
4

3 に答える 3

4

または試しましたlonglong long?コンパイラによっては、それらが機能する場合があります。しかし、最終的には他の PE の問題のために bigint ライブラリが必要になります。インターネット上にいくつかありますが、学習のためにこれを行っているので、自分で書くことをお勧めします。

于 2010-12-13T14:29:36.937 に答える
2

C標準では、整数型の下限が指定されています。

char: 127 (2^7 - 1)
short: 32767 (2^15 - 1)
int: 32767 (2^15 - 1)
long: 2147483647 (2^31 - 1)
long long (C99): 9223372036854775807 (2^63 - 1)

Project EulerがC99コンパイラを使用している場合は、で保証されlong longます。

また、これらは最小値です。Project Eulerlongは64ビットなので、longに対しても機能するはずですC89

于 2010-12-13T14:43:27.467 に答える
1

C99 で最大の整数型はlong longです。これを試すことができます。

double大きな数値では不正確になるため、正確な積分計算を行うことはできません。

于 2010-12-13T14:28:49.870 に答える