cで愚かに大きな数字を分割する方法
-
09-10-2019 - |
質問
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のと思います long
Sは64ビットなので、 long
のためにも機能する必要があります C89
.
C99の最大の積分タイプはです long long
, 、これを試すことができます。
正確な積分計算を行うことはできません double
それは大きな数字で不正確であるため。
所属していません StackOverflow