問題タブ [perfect-numbers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 豊富な金額、ロジック
以下の問題に取り組んでいますが、間違った答えが得られます。私のロジックの何が問題になっていますか?
完全数とは、その固有約数の合計がその数と正確に等しい数です。たとえば、28 の適切な約数の合計は 1 + 2 + 4 + 7 + 14 = 28 になります。つまり、28 は完全数です。
固有約数の合計が n 未満の場合、数 n は不足と呼ばれ、この合計が n を超える場合、数 n は豊富と呼ばれます。
12 は最小の豊富な数であるため、1 + 2 + 3 + 4 + 6 = 16 であるため、2 つの豊富な数の合計として記述できる最小の数は 24 です。 28123 は、2 つの豊富な数の合計として記述できます。しかし、この上限は、2 つの豊富な数の合計として表現できない最大の数がこの制限よりも小さいことがわかっているにもかかわらず、分析によってこれ以上減らすことはできません。
2 つの豊富な数の合計として書ききれないすべての正の整数の合計を求めます。
これが私のコードです:
ここで私の論理に何か問題がありますか? 2 つの豊富な数の合計として定義できる整数はすべて 0 になるのではないでしょうか?
c++ - Project Euler #23、プログラムで問題が見つかりません
リンク : http://projecteuler.net/problem=23
完全数とは、その固有約数の合計がその数と正確に等しい数です。たとえば、28 の適切な約数の合計は 1 + 2 + 4 + 7 + 14 = 28 になります。つまり、28 は完全数です。
固有約数の合計が n 未満の場合、数 n は不足と呼ばれ、この合計が n を超える場合、数 n は豊富と呼ばれます。
12 は最小の豊富な数であるため、1 + 2 + 3 + 4 + 6 = 16 であるため、2 つの豊富な数の合計として記述できる最小の数は 24 です。 28123 は、2 つの豊富な数の合計として記述できます。しかし、この上限は、2 つの豊富な数の合計として表現できない最大の数がこの制限よりも小さいことがわかっているにもかかわらず、分析によってこれ以上減らすことはできません。
2 つの豊富な数の合計として書ききれないすべての正の整数の合計を求めます。
問題の答えは 4179871 で、私のプログラムは 3797954 を示しています。
何よりもまず、配列豊富な [ ] を 28124 未満のすべての豊富な数字で埋める関数を作成します。豊富な数字をグーグル検索したところ、配列と正確に一致するため、これは完全に正常に機能します。
次に、すべての数字が 1 ~ 28123 の別の配列があります。それらすべてが「2 つの豊富な数字の合計として記述できない」と仮定します。これらはすべて配列 hold[ ] に書き込まれます。
最後に、豊富な [ ] 内のすべての数値と豊富な [ ] 内のすべての数値を加算し、ホールド [ ] の値を 0 に設定することにより、2 つの豊富な数値の合計として記述できる数値を取り除きます。豊富な[0からn] +豊富な[0からn]] = 0)ホールド[]に残りのすべての数字を追加すると、3797954しか得られません
このプログラムは、すべての豊富な数にすべての豊富な数を加算するため、あまり効率的ではないことはわかっていますが、問題なく動作するはずです。どうしたの?
c++ - 「浮動小数点例外」というエラーが表示されるのはなぜですか?
ユーザーの入力よりも低い完全数を見つけるコードを作成しようとしています。正しい出力のサンプル:
正の整数を入力してください: 100
6 は完全数
です 28 は完全数です
100 以下の完全数はもうありません
しかし、コードを実行するとエラーが発生しますFloating point exception
理由がわかりません。私は何を間違っていますか?
これが私のコードです:
python-2.7 - プログラムに関連するファイルを開くと、プログラムも停止しますか?
完全数を検索することになっているこのプログラムがあります。(X を割るすべての数の合計を 2 で割った値が X に等しい場合、X は完全数です)
sum/2 = x
現在、古代ギリシャで知られていた最初の 4 つを発見したので、それほど素晴らしいものではありません。
次は 33550336 です。
これが大きな数であることはわかっていますが、プログラムは約 50 分間実行されていますが、まだ 33550336 が見つかりません。
プログラムの実行中にすべての完全数を格納する .txt ファイルを開いたためですか、それとも実行するのに十分な速度の PC を持っていないためですか*、または Python を使用しているからですか?
*注: この同じ PC は 10 分間で 500,000 を素因数分解しました (完全数プログラムと 3 つの YouTube タブを備えた Google Chrome も実行しています)。Python も使用しています。
プログラムのコードは次のとおりです。
c# - ルーカス・レーマーの最適化
私は、C# コードを使用して Lucas-Lehmer 素数性テストを最適化する作業を行ってきました (はい、完全数を計算するためにメルセンヌ素数を使用しています。現在のコードでさらに速度を改善できるのではないかと考えていました。数値を保持するための System.Numerics.BigInteger クラス。おそらくこれは賢明ではありません。
このコードは、実際にはhttp://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_testにあるインテリジェンスに基づいています。
このページ (タイムスタンプ) セクションでは、分割を最適化するためのいくつかの証拠が示されています。
LucasTest のコードは次のとおりです。
}
編集:以下のMare Infinitus によって提案されているように、BigInteger クラスの ModPow を使用するよりも高速です。その実装は次のとおりです。
}
LucasLehmerMod メソッドは次のように実装されます。
私が恐れているのは、.NET フレームワークから BigInteger クラスを使用すると、それらの計算に拘束されることです。それを改善するには、独自の BigInteger クラスを作成する必要があるということですか? または、このようにKaratsubaSquare (Karatsuba アルゴリズムから派生したもの) を使用して維持できますか?
基本的には、for ループを最適化することで、Lucas-Lehmer のテスト方法を改善できるかどうかを調べたいと思います。しかし、私はそこに少し立ち往生しています...それは可能ですか?
もちろん、どんな考えでも大歓迎です。
いくつかの追加事項:
複数のスレッドを使用して、完全数を見つける計算を高速化できます。ただし、適切なパーティショニングについては (まだ) 経験がありません。私は自分の考えを説明しようとします(コードはまだありません):
最初に、エラトステネスの篩を使用してプライムテーブルを生成します。シングル スレッドで 2 ~ 100 万の範囲内の素数を見つけるには、約 25 ミリ秒かかります。
C# が提供するものは非常に驚くべきものです。Parallel.For メソッドで PLINQ を使用すると、いくつかの計算をほぼ同時に実行できましたが、primeTable 配列がチャンクされて、検索に反映されません。
このタスクには、スレッドの自動負荷分散では不十分であることはすでにわかっています。したがって、メルセンヌ数に応じて負荷バランスを分割し、完全数を計算するために使用する別のアプローチを試す必要があります。誰かこれを経験したことがありますか?このページは少し役立つようです: http://www.drdobbs.com/windows/custom-parallel-partitioning-with-net-4/224600406
さらに調べてみます。
今のところ、私の結果は次のとおりです。私の現在のアルゴリズム (C# の標準 BigInteger クラスを使用) は、ラップトップ (4 コアと 8GB の Intel I5) で最初の 17 個の完全数 ( http://en.wikipedia.org/wiki/List_of_perfect_numbersを参照) を 5 秒以内に見つけることができます。 RAMの)。ただし、その後スタックし、10 分以内に何も見つかりません。
これはまだ一致させることができないものです... 私の直感 (および常識) は、18 番目の完全数 (Mersenne Prime 3217 を使用) を計算する for ループが 3214 回実行されるため、LucasLehmer テストを調べる必要があることを教えてくれます。改善の余地はあると思います...
Dinony が以下に投稿したのは、C で完全に書き直すという提案です。パフォーマンスが向上することに同意しますが、C# を選択して、その制限と利点を見つけました。広く使用されており、アプリケーションを迅速に開発できるため、試してみる価値があるように思えました。
安全でないコードはここでも利点を提供できますか?
math - Project Euler #23 - これはどういう意味ですか?
http://projecteuler.net/problem=23
私は答えを探していません。しかし、誰かがこれが何を意味するのか説明できますか?
12 は最小の豊富な数であるため、1 + 2 + 3 + 4 + 6 = 16 であるため、2 つの豊富な数の合計として記述できる最小の数は 24 です。
12 が最小の豊富な数である場合、なぜ 24 は 2 つの豊富な数の合計として記述できる最小の豊富な数なのですか?
問題文
完全数とは、その固有約数の合計がその数と正確に等しい数です。たとえば、28 の適切な約数の合計は 1 + 2 + 4 + 7 + 14 = 28 になります。つまり、28 は完全数です。
固有約数の合計が n 未満の場合、数 n は不足であると呼ばれ、この合計が n を超える場合、その数は豊富であると呼ばれます。
12 は最小の豊富な数であるため、1 + 2 + 3 + 4 + 6 = 16 であるため、2 つの豊富な数の合計として記述できる最小の数は 24です。 28123 は、2 つの豊富な数の合計として記述できます。しかし、この上限は、2 つの豊富な数の合計として表現できない最大の数がこの制限よりも小さいことがわかっているにもかかわらず、分析によってこれ以上減らすことはできません。
2 つの豊富な数の合計として書ききれないすべての正の整数の合計を求めます。
c - 「if (変数 % 2 == 0)」でプログラムがクラッシュする
完全数を求めるプログラムを書いています。これらの完全数について読んだ後、それらのリストに出くわしました:完全数のリスト. 現時点での出力は次のとおりです。
私は配列を作成し、それを数字で配置することにしました。これは、数字を完全に(残りなしで)分割します。したがって、配列のすべての要素を追加することで、完全数かどうかを確認できます。しかし、アプリがクラッシュし、その理由がわかりません:
c# - C# の完全数の演習
次の演習を手伝ってくれませんか?(これは宿題ではなく、私が使用している本の演習です。)
「整数は、1 (ただし、数値自体ではない) を含む要素の合計が完全数であると言われます。たとえば、6 = 1 + 2 + 3 であるため、6 は完全数です。書き込み方法 Perfectパラメータ値が完全数であるかどうかを判断します。このメソッドは、2 から 1000 までのすべての完全数を判断して表示するアプリで使用します。各完全数の約数を表示して、その数が本当に完全数であることを確認してください。
だからここに私がこれまでに得たものがあります:
どのようにしますか?私のコードは修正可能ですか? どのように修正しますか?ありがとう!
行 myList[counter] = j; でエラーが発生しています。(インデックスが範囲外でした)それに加えて、本来のように完全な数が表示されていません....
編集 = いくつかの変更を加えました。
これで、すべての数字を 1000 まで繰り返し表示し、それが完全かどうか (true または false) を表示します [これは演習で求められたものではありませんが、正しい方向への一歩です (演習では、表示する必要があると述べています)完全数のみ)]。
いずれにせよ、奇妙なのは、完全数ではない 24 番が true であるということです.... http://en.wikipedia.org/wiki/Perfect_numbers#Examples
なぜ24は違うのですか?
どうもありがとう
c# - C# での完全数の演習で助けが必要です
(これは宿題ではなく、私が使用している本の演習です)
「整数は、1 (ただし、数値自体ではない) を含む要素の合計が完全数であると言われます。たとえば、6 = 1 + 2 + 3 であるため、6 は完全数です。書き込み方法 Perfectパラメーター値が完全数かどうかを判断します。このメソッドは、2 から 1000 までのすべての完全数を判断して表示するアプリで使用します。各完全数の約数を表示して、その数が本当に完全数であることを確認してください。」
問題は、完全数が 1 回ではなく 2 回表示されることです。なぜこれを行うのですか?