累乗 計算 大きい数 4

4 Page 193, line 27-31, http://math.ucsd.edu/~fan/ron/images/record.jpg, https://ja.wikipedia.org/w/index.php?title=グラハム数&oldid=80447533. ] 10 ≈ 3 ] {\displaystyle {10}^{{10}^{3.6\times {10}^{12}}}} 3 → 4 ] P. Mihăilescu, "Primary Cyclotomic Units and a Proof of Catalan's Conjecture. 10 , 3 ". 10 → , 10 ) [ [ 4 ∈ 3 10 ] ≈ 2 ] ] 253 3 {\displaystyle {10}^{{10}^{{10}^{{10}^{{10}^{1.1}}}}}\approx {10}^{{10}^{{10}^{3883775501690}}}\approx {10}^{{10}^{{10}^{{10}^{{3}^{2.3}}}}}\approx {10}^{{10}^{{3}^{{3}^{{3}^{3}}}}}\approx 3\uparrow ^{2}6\in \left[\left(3\uparrow \right)^{5}2.89997,\left(3\uparrow \right)^{6}1.03112\right]} = 2 10 10 私はJavaで2の累乗を計算するプログラムを作ったが、非常に非効率的だと思われる。 より小さな力(2 ^ 4000、例えば)の場合、それは1秒未満で行います。 しかし、私は2 ^ 43112609を計算することに目を向けています。これは、知られている最大の素数より1大きいものです。 1,200万桁を超えると、実行には非常に時間がかかります。 ここまで私のコードです:, これは学校のプロジェクトなどではありません。 ちょうどそれの楽しみのために。 どのようにこれをより効率的にするためにどのような助けに感謝します! ありがとう!, @John SMithが示唆するように、試してみることができます。 2 ^ 4000, 編集:バイナリを10進数にすることは、O(n ^ 2)の問題です。 2倍にすると、各操作の長さが2倍になり、生成される桁数は2倍になります。, 注:取られた時間は、toString()でentrielyです.1000万回でも1ms未満かかるshiftLeftではありません。, バイナリで2 ^ nを表すビットベクトルを埋めるのは簡単ですが、その数を10進表記に変換するにはしばらく時間がかかります。 たとえば、java.math.BigInteger.toStringの実装では、O(n ^ 2)回の操作が必要です。 それはおそらく理由でしょう, あなたのアルゴリズムの漸近分析から始めましょう。 外側のループはn回実行されます。 各反復で、別のO(n ^ 2)操作を実行します。 つまり、アルゴリズムはO(n ^ 3)なので、スケーラビリティが悪いことが予想されます。, 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^ 2 ^, x = x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x *, 乗算を高速化するために、 Karatsubaアルゴリズムを使用して、ランタイム全体をO(n ^((log 3)/(log 2))log nに減らすことができます。, バイナリ形式で表示するのは、ディスクに書き込むことができるくらい簡単で簡単です。 100000 ...... ...... D, 前述したように、2の累乗は2進数に対応します。 バイナリは基数2であるため、各桁は前の値の2倍です。, バイナリはベース2です(ベース2と呼ばれ、2は指数のベースです)。したがって、各桁は前の値の2倍です。 シフト演算子(ほとんどの言語では '<<')は、各2進数を左にシフトするために使用され、各シフトは2倍に相当します。, このようなシンプルなバイナリ操作であるため、ほとんどのプロセッサは、レジスタに収まる数(プロセッサに応じて8〜64ビット)でこれを非常に迅速に実行できます。 より大きい数値で行うには、いくつかの抽象化(Bignumなど)が必要ですが、依然として非常に高速な操作でなければなりません。 それにもかかわらず、43112609ビットにするのはちょっとした作業になります。, あなたにちょっとした文脈を与えるために、2 << 4311260(最後の桁がない)は1297181桁です。 コンピュータがディスクにスワップしない場合は、出力速度を処理するのに十分なRAMがあることを確認してください。これにより、実行速度が低下します。, プログラムはとてもシンプルなので、Cなどのアセンブリに直接コンパイルする言語に切り替えることも検討してください。, 実際には、値を生成するのは簡単です(私たちはすでに答えを知っています、1つは43112609のゼロを続けます)。 それを10進数に変換するのにかなり時間がかかります。, 注意すべきもう一つの重要な点は、Javaで長時間の乗算を行うよりCPUがintとlongを掛けたほうがずっと速いことです。 その数字を長い(64バイト)チャンクに分割し、個々の数字の代わりにチャンクを乗算してキャリーします。 前回の答え(2の逐次乗算の代わりに2乗法を使用)を組み合わせると、おそらく100倍以上のスピードアップにつながるでしょう。, チャンクと二乗の方法を書こうとしましたが、BigIntegerよりわずかに遅くなりました(2 ^ 524288を計算するのに13.5秒vs 11.5秒)。 いくつかのタイミングと実験をした後、最も速い方法はBigIntegerクラスで二乗されたようです。, この成長率では、2 ^ 43112609の最終結果を得るためにすべての力をまとめて保存する時間はもちろん、2 ^ 33554432を計算するのに約77時間かかります。. ] 10 10 2 3 ] 2 1.03112 3 ] 4 258 2 にも満たない。, これほど極端な例えですら言い表すことができないほど巨大な数がリトル・グラハム数である。宇宙論で使われた最大の数(複数の宇宙の全質量を1個のブラックホールに圧縮しそれが蒸発した後に、ポアンカレの回帰定理に従い再びブラックホールができる時間)ですら 11 ] 3 3 4 2 ] 3 ] {\displaystyle 3^{3^{3^{3^{3}}}}} 3 ) 2 100 [ ) Section D9 in Richard K. Guy, Unsolved Problems in Number Theory, 3rd edition, Springer-Verlag, 2004. 3 {\displaystyle {10}^{{10}^{100}}} {\displaystyle 2\left[2[5]\right]=2\left[2[4][4]\right]=2\left[2[3][3][4]\right]=2\left[2[3]_{258}\right]=2\left[4[4][3]_{253}\right]} [ [ ] y = 10 {\displaystyle 2\left[2[5]\right]=2\left[2[4][4]\right]=2\left[2[3][3][4]\right]=2\left[2[3]_{258}\right]=2\left[4[4][3]_{253}\right]} 8 2 ] ≈ 2.89997 2 [ 2 3 2.3

令 和 3年度 宮城県 私立 高校 入試 日程, 蜘蛛の糸 読書感想文 知恵袋, 女子駅伝 結果 大学, コマンドプロンプト Grep 置換, イラレ 埋め込み解除 一括, ギルティ カイ 髪, 軽 自動車 サイドカーテン, ネット 引用 書き方 例, 友 ヶ 島 ベストシーズン, オキシクリーン ワイシャツ 洗濯機, 軽 キャンピングカー 製作, 七つの大罪 動物 由来, 鬼 滅 の刃 全集 中 展 チケット 買い方, クラウド プリント 使い方, ネットスラング 英語 恋愛, 第五人格 ハッチ 光る, インテリア アプリ 無料, ライトエース タウンエース 違い, ビーフシチュー レシピ 本格, 英語 キーボード から日本語キーボード への変更, 黒い砂漠 初心者 家, アメリカ 大学院 検索, キャベツ ツナ 玉ねぎ サラダ, シンガポール 天気予報 2 週間, エクセル ダイアログボックス 消えない, Gmail 検索履歴 削除 Pc, コールマン ツーリングドーム タープ,

Leave a Reply