数値の階乗を連続する数値の合計として表現する方法を見つけるための 2 つの方法について説明します。最初の方法は直接的で単純な方法ですが、もう 1 つの方法では等差数列の概念を使用して、占有される時間と空間の点で複雑さを軽減します。
###問題文###これには 2 つの異なる機能が関係します -
誰もが知っているように、3 の階乗は 6 であり、1 2 3 と書くことができるため、答えは 1 通りです。
例 2
リーリー誰もが知っているように、4 の階乗は 24 で、7 8 9 と書くことができるため、答えは 1 通りです。
方法1
len を正の整数として取得した場合、それを解として扱います。
###例###次の例では、数値の階乗を連続する数値の合計として表現する方法の数を求めます。
リーリー ###出力###方法 2: 最適化方法
数値 p から始まる len 個の連続する数値の合計は、 -
と書くことができます。 リーリー sumも Number! に等しいためです。
###我々は書ける### リーリーここでは、すべての (len, p) ペアを数えるのではなく、すべての (len, (len 2*p 1)) ペアを数えます。これは、AB=2*Number であるすべての順序付けされた pf (A, B) を計算することを意味します。そしてA
これは、2*数値の奇数の約数を探していることを意味します。これは Number の奇数の約数でもあります。 約数の数を計算するには! 、因数分解では素数の累乗を計算する必要があり、約数の数は (f1 1)*(f2 1)* … *(fn 1) となります。
ルジャンドルの公式を使用して、数値の階乗における素数の最大累乗を計算します。
###例###このアプローチのコードを以下に示します - リーリー ###出力###
上記の C プログラムを実行すると、次の出力が生成されます -
リーリー ###結論は###この記事では、数値の階乗を連続する自然数の合計として表現する、数値を求める 2 つの異なる方法について説明しました。
以上が階乗 n を連続する数値の合計として表現しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。