メビウスはノートに耐える

ブログ閲覧効果が良い

アルゴリズムの説明

(この記事は、メビウスの逆転を学んだことを前提としています(〃 '▽'〃)

メビウス関数には次のプロパティがあることがわかります:\(\ sum \ limits_ {d | n} \ mu(d)= [n = 1] \)

この特性に従って、ふるいのようなもの、つまり最初は\(0 \)である配列を記述します。最初の\(I \)ホイール、\(I \)の倍数であるプラス\(\ MU(I)\)

ここに画像の説明を挿入

\(N- \)ホイールの後、明らかにのみ第一の位置は左\(1 \)を、他のものになっている(0 \)\この表を理解し、下を見下ろしてください。

したがって、ここで\(n = 1 \)のときに答えを求めると仮定しますが簡単に見つけることができるの\(n \)の倍数の答えの合計、つまりピンチを変換する方法(⊙.⊙)だけです。

私たちは、セット(\ f(x)が)\表し\(N \)を正確に\(X \)答え、\(F(X-)が\)を表す(\ n)を\\(X \)複数回答そして、それは\(\ sum \ limits_ {d | n} f(n)\)です。

考虑\(\ sum \ limits_ {i = 1} ^ {n} \ mu(i)F(i)\)

それ\(= \ sum \ limits_ {i = 1} ^ {n} \ sum \ limits_ {i | j} \ mu(i)f(j)\)

\(f(i)\)が何回カウントされるかを考えてみましょう

\(\ sum \ limits_ {j = 1} ^ {n} f(j)\ sum \ limits_ {i | j} \ mu(i)= \ sum \ limits_ {j = 1} ^ {n} f(j )[j = 1] = f(1)\)

\(f(1)\)私たちが要求したものではありません、\(n \)はたまたま\(1 \)の計画です(✪ω✪)

したがって、問題を解決するためのメビウスの断固たるステップ:

  1. \(n = 1 \)プログラムに変換します(通常、このステップでの考え方を比較します)
  2. \(n \)の倍数のスキームを見つけ

これは少し抽象的だと言ってください、またはいくつかの質問をしてください☆めまい

離陸〜

T1。CF 439E

与えられた\(Q \)クエリ、与えられた各\(N-、K \)は、どのように多くの方法を尋ねた\(N- \)\(K \)番号が追加され、すべての数\ (\ gcd \) is \(1 \)(ie:part of \(\ gcd \)is not allowed to \(1 \)、for when \(n = 20、k = 3 \)\(\ { 2,3,15 \} \)は合法的な分割のセットです)

\(q、n \ le 10 ^ 5、k \ le n \)

解決策

上記の「\(n = 1 \)プラン番号」に変換する方法

セットが\(F(I)\)を表し:\(K \)\(\ GCD = I \)番号スキーム、\(F(I)\)を表し:\(K \)番号\ (\ gcd \)\(i \)の倍数であるスキームの数です(つまり、\(k \)がすべて\(i \)の倍数であるスキームの数)。

\(F(i)\)は良いです。明らかに、この時間\(I \)がある(N- \)\因子(\(K \)の数である\(I \) 倍数、彼らは追加\(N- \)である(\ I \ )))。そうでない場合、\(F(i)= 0 \)

次に、すべての数は\(i \)の倍数の除算スキームであり、\(i \)数を1つのブロックにマージできます。次に、\(n / i \)ブロックがあり、\(k \)に分割できます。各部分について、解の数を見つけます。我々は、次に\(N / I \)は中間ブロックを挿入(N / I-1 \ \ ) バッフル、選択\(K-1 \)一つ置くことができる\(N- \)に番号(\ k \)パーツ。各パーツは\(i \)の倍数です。このように、スキームの数は\(F(i)= C_ {n / i-1} ^ {k-1} \)です。前処理階乗および階乗逆、この\(O(1)\)計算。

次に、メビウスの除外式によれば、\(f(1)= \ sum \ limits_ {i = 1} ^ {n} F(i)\)です。次に、この質問では、タイプを変更する必要があります(上記を参照)。\(i | n \)\(F(i)\)は、上記の方法に従って計算できます。それ以外の場合は、\(F(i)= 0 \)です。したがって、\(f(1)= \ sum \ limits_ {i | n} F(i)\)

次に、この列挙係数は\(O(\ sqrt {n})\)です。全体の複雑さ\(O(q \ sqrt {n})\)は合格します。

コード(スペースの問題のため、ホームページを掲載したくありません(* *))(コードが理解できない右下隅に連絡するか、コードのコメント領域にコメントを残してください~~❤)

T2。CF 900D

それは分裂の問題でもあります。\(T1 \)と同等

  1. \(k \)制限を削除する
  2. 問い合わせのグループ。スコープは\(n \ le 10 ^ 9 \)変更され、回答モードは\(10 ^ 9 + 7 \)です。
  3. パラメータ\(y \)を指定して、すべての数値を割ります\(\ gcd = y \)\(1 \)に等しいのではなく

解決策

すべての数字(\ \ GCD = Y \)で割った全てに対応する、\(Y \)の後に\(\ = GCD 1 \)

その場合、\(k \)制限はありません。これは、ランダムに選択/選択解除されたすべてのパーティションに相当します。これ⊙(・◇・)どう?

仮定\(N- \)バッフルを、答えは(^ {N-2} \)\その場合、\(n \)の数は制限されず、各数は\(y \)の倍数であり、解の数は\(2 ^ {n / y-1} \)です。

次に、\(n \ le 10 ^ 9 \)の場合、\(\ mu \)の一部のみを除外でき、範囲を超える場合は、暴力的である必要があることに注意してください

この時間の複雑さは少し形而上学的です...しかし、それでもまずまずですφ(>ω<*)

コード

T3 CF1036F

\(T \)グループクエリ、毎回\([2、n] \)に適切な数値がいくつあるか。数値\(x \)は「適切な数値」であり\(\ sqrt [k] {x} \)が整数であるような\(k \)はありません

\(T \ le 10 ^ 5、x \ le 10 ^ {18} \)

解決策

数は「良い数」であり、素因数を分解した後、すべての指数\(\ gcd = 1 \)

次にすべての指数の\(\ gcd \)どのよう\(k \)の倍数であるかを考えます明らかに、このスキームの数は\(\ lfloor \ sqrt [k] {x} \ rfloor \)です。

次に、\(k \)はおそらく\(60,70 \)に列挙されれば十分です。

そして、カード億の少し O(╥﹏╥)Oにより一定のパス

コード

おわりに

私の上のでたらめを注意深く読んで理解すれば...

おめでとうございます!メビウス反転を学んだ!φ(>ω<*)

花の終わり~~~

おすすめ

転載: www.cnblogs.com/LightningUZ/p/12728756.html