質問

Cを学んでいて、それを考えました プロジェクトオイラー 問題は楽しくて興味深い方法です(そして、数学についても考え続けるので、1石で2羽の鳥を殺すでしょう)が、私はひっかかった。

私は(私が思うに)、数の最大の主要な要因を見つけるための良い(単純な場合)アルゴリズムを持っています。それは(私がテストした限り)動作しますが、PE質問は最終的な質問として600851475143を使用します。私はダブルなどを使用しようとしましたが、モジュロとディビジョンオペレーターの両方を見つけることはできません。どんな助けも大歓迎です。

添付されたコードは、ダブル(または他のタイプ)で動作させる前に添付されています。

#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;}
}
役に立ちましたか?

解決

やってみました long また long long?コンパイラに応じて、それらは機能する可能性があります。しかし、最終的には他のPE問題のためにBigintライブラリが必要です。インターネット上にはいくつかありますが、あなたがこれを学ぶためにこれをしているので、私はあなた自身を書くことを提案します。

他のヒント

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がaを使用する場合 C99 保証されているコンパイラ long long.

また、これらはです 最小 値。 Project Eulerのと思います longSは64ビットなので、 long のためにも機能する必要があります C89.

C99の最大の積分タイプはです long long, 、これを試すことができます。

正確な積分計算を行うことはできません double それは大きな数字で不正確であるため。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top