問題タブ [factorial]
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 - 動的 Java 整数/長いオーバーフロー チェックとパフォーマンスの比較
これはかなり理論的な質問なので、言語は特に Java ですが、一般的な解決策で十分です。
自明な階乗関数を書きたいとします。
しかし今、階乗がオーバーフローするかどうかも確認したいと思います (単純に MAX_FACTORIAL_PARAMETER などをハードコーディングする必要はありません)。一般に、乗算中のオーバーフローのチェックは、元の入力に対して結果をチェックするのと同じくらい簡単ですが、この場合、オーバーフローはどの時点でも発生する可能性があるため、すべてのループでより多くの除算と比較を実行すると、かなりコストがかかります。
問題は 2 つあります。すべてのステップで乗算オーバーフローをチェックしたり、最大許容パラメーターをハードコーディングしたりせずに、オーバーフローの階乗問題を解決する方法はありますか?
そして一般的に、各段階で高価なチェックを導入することでパフォーマンスを損なうことなく、すべての段階で静かに失敗する可能性がある反復/再帰の多くの段階を含む問題にどのようにアプローチすればよいでしょうか?
haskell - Haskell の組み込み階乗関数
ばかげた質問のように聞こえるかもしれませんが、Haskell にはビルトインの階乗はありますか?
Google は、Haskell を自分で実装する方法を説明するチュートリアルを提供してくれましたが、Hoogle には何も見つかりませんでした。必要になるたびに書き直したくありません。
代わりに使用できますproduct [1..n]
が、真のInt -> Int
階乗組み込み関数はありますか?
algorithm - 大きな数の階乗の和
N! の桁数の合計を計算したい。
Nの非常に大きな値、たとえばN(1500)に対してこれを行いたいと思います。.NET 4.0 を使用していません。これを解決するために BigInteger クラスを使用することはできません。
これは、他のアルゴリズムまたは手順で解決できますか? 助けてください。
私はこのようなことをしたい任意に大きな数の階乗を計算し、C#ですべての桁を表示します。しかし、私は解決することができません。
c++ - lg(N!)の計算:誰もがより良い再帰的方法を持っていますか?
投稿のタイトルが私の質問に対応していると思います。しかし、繰り返しになりますが、私は誰かがこの問題に対してより良いアプローチを持っているかどうか疑問に思っています。
人々の反応に基づいて、これは本の問題であり、本はそれを再帰的に行うように言っていることを明確にする必要があります。私はプログラミングの問題を練習していて、他の人からフィードバックを得ようとしているので、より良いプログラマーになるために取り組んでいるときに間違いを見つけることができます。
python - Pythonの階乗にexclam(!)構文を使用する
実用的な階乗関数/演算子は、数学のような構文で定義できますか?つまり、!
シンボルを使用します。
物事が曖昧になる可能性のある既存のシンボルのユースケースは考えられません
- ipython
!shell_escape
は常に行の先頭に強打があります - 他の解釈はまたは同様のエラーであるため、通常どおりのようなもの
0!=1
になります)True
factorial(0) = 1
SyntaxError: can't assign to literal
string - 大文字と小文字を区別する文字列の組み合わせの数
私が覚えているように、組み合わせの数は n です!
しかし、私の例では、文字列「abc」があります。aBcやABcなど、異なるレジストリを持つすべての組み合わせを取得したい
したがって、abc は 3 文字です。3!= 1 * 2 * 3 = 6。ただし、この作業を手動で行うと、8 つのバリエーションが得られます。
1 abc 2 abc 3 abc 4 abc 5 abc 6 abc 7 abc 8 abc
すると、2^3 = 8 と答えられますが、2 とは何ですか? 3 - 文字列内のレジストリの数です。2 とは何ですか? レジストリバリアントの数?
groovy - Groovy による末尾再帰
3 つの階乗アルゴリズムをコーディングしました。
- スタックオーバーフローで失敗すると思います。問題ない。
- 末尾再帰呼び出しを試し、前のアルゴリズムを再帰から反復に変換します。うまくいきませんが、理由がわかりません。
- メソッドを使用
trampoline()
すると、期待どおりに正常に動作します。
python - reduce() を使用したラムダ関数で math.factorial を使用する
文字列の一意の順列の数を計算する関数を作成しようとしています。たとえば、aaa
return1
とabc
return を返し6
ます。
私はこのような方法を書いています:
(疑似コード:)
ここで、A、B、C はそれぞれの固有文字の出現回数です。たとえば、文字列'aaa'
は になりますが3! / 3! = 1
、 に'abc'
なります3! / (1! * 1! * 1!) = 6
。
これまでの私のコードは次のようなものです:
一意の文字が 1 つしかない文字列を渡そうとした場合を除いて、すべて正常に動作します。つまりaaa
、間違った答えが得られます。
ここで、長さ 1 のリストに対して階乗を使用してラムダ関数を実行することに問題があることがわかります。ただし、その理由はわかりません。他のほとんどのラムダ関数は、2 つの要素が必要な場合でも、長さ 1 のリストで機能します。
これはしません:
私が別のことをしなければならないことはありますか?これを回避するさまざまな方法で関数を書き直すことができることはわかっていますが (たとえば、 を使用しないlambda
)、これが具体的に機能しない理由を探しています。
java - 比較のために大きな数値を文字列形式に変換する
BigIntegers でも処理できないほど大きい数値を比較しようとしています。私の解決策は、数値を文字列に変換し、文字列比較を使用することです。
これは機能しますか?このようなものを実装する方法がよくわかりません。私が夢中になっているプロジェクト Euler プログラムの 1000 の階乗を生成するアルゴリズムを単体テストしようとしています。
math - 逆階乗の成長
逆階乗関数 f(n) = k ここで k! 最大の階乗 <= n です。逆階乗関数は O(log n / log log n) だと言われました。本当ですか?それとも、漸近的な成長に対する本当に本当に良い近似ですか? 私が試したすべての方法は、log(n)/log log(n) (分母の小さな因子または小さな項のいずれか) に非常に近いものを提供しますが、完全ではありません。