本当に大きな数字とObjective-C
-
06-07-2019 - |
質問
いくつかの Project Euler の問題をいじくり回してきましたが、当然、処理を必要とする多くの問題に直面しています。 long long
型番号より大きい。 CocoaとObjective-Cを使用することに専念しています(仕事のために鋭利である必要があります)が、これらの本当に大きな数字を処理するエレガントな方法を見つけることができません(ライブラリを読んでください)。
GMPを使用したいのですが、XcodeでGMPを使用することは完全に痛いようです。
誰か他のオプションを知っていますか?
解決
私があなたなら、XCodeの外で gmp をコンパイルし、 gmp.h と libgmp.a(またはlibgmp.dylib)だけを使用します私のXCodeプロジェクトで。
他のヒント
配列に数字を保存してみてください。
すべての算数問題に対していくつかの新しい関数を記述する必要がありますが、それは大学でそれを行うように言われた方法です。
さらに、大きな数値は実際にはそれほど大きくなく、実際には完全に数値ではなかったため、計算の速度はかなり改善されました
それが役立つかどうかを確認
よろしく
vecLib
の vBigNum
は、1024ビット整数(符号付きまたは符号なし)を実装します。それで十分ですか?
matlab(またはそれに近いもの)を使用する場合は、大きな整数形式の実装(vpi)ファイル交換で。
かなり簡単です。各桁を個別に保存します。加算と減算は単純で、キャリー演算を実装するだけです。乗算は、畳み込みを使用してからキャリーを使用するのが最適です。多くのPEの問題に役立つ、divideおよびmod演算子を実装してから、powermod操作を実装します。べき乗は簡単です。指数のバイナリ表現に基づいて、二乗と乗算を繰り返すだけです。
これにより、PEの多くの問題を解決できます。
私も、Cocoa / Objective-Cでオイラープロジェクトの問題をいくつか試してみて、イライラすることがわかりました。以前はJavaとおそらくPHPを使用していました。 このスレッドの私の正確な問題
このプロジェクトでは、常にライブラリの不正行為を検討しました。必要なものでクラスを書くだけです。そして、mallocやuint64_tなどを使用することを恐れないでください。 NSNumberは多くの場合、良い考えではありません 。
一方で、明らかな解決策では膨大な数の膨大な数が必要になる多くの問題があり、トリックはこれらの膨大な数を使用せずに問題を解決する方法を見つけることです。 (たとえば、1,000,000階乗の最後の1000桁の合計は?)