数論の意志

個人的な使用のためのデータの統合は、非私の元、侵略謝罪を削除します

複数

B |自然数の場合は、B、KaはBを=というように自然数kが存在する場合、その後、bはの倍数である、除算bを言う、bは割り切れることができ、表記

無限に多くの倍数の数があります。
すべての倍数は、それ自体であり、1
複数の推移
[1、n]はxの倍数⌊nx⌋の範囲内であります
除数

BはBの倍数である場合は自然数、Bについては、その後も因子として知られている、除数であります

すべての数値は、数値自体についてであり、含む(又は)1

自然数の除数の限られた数、除数の数は、一般的にD(N)と呼ばれます
テーブルルックを作ります
N 1 2 3 4 5 6 7 8 9 10
D(N)1 2 2 3 2 4 2 4 3 4
テーブルを再生
INT D [MAXN];
 //は、各番号の除数番号の[1、N]を算出
 // Oの複雑さ(N-N-ログ)
ボイド(calc_divisorsをINT N-){
     ためINT I = 1 ; Iは< N- =; ++ I){
         // Iの全ての倍数を列挙
        するためのINT ; J <= N - 、= J + J = I I){ 
            D [J] ++ ; 
        } 
    } 
}

素数与合数

もし2つだけ(1自体)の数の除数は、素数と呼ばれる(またはプライム)

(1自体を除く)数の非自明な約数が存在する場合、それは合成数と呼ばれています
図1は、プライムでも複合でもありません!
素性判定:
//は数が素数であるか否かを判断する
BOOLの is_prime(INT X){
     // 1外注公報
    IF(X == 1リターン falseにし;
     // 、2から√xを列挙するために分割か否かを判断
    するためのint型 Iを= 2 ;私は= Xを<*; ++ I){
         // もし同時の数に比べて、分割
        IF(%IのXの== 0リターン 偽へ; 
    } 
    // プライムするため、割り切れない場合は
    リターン trueに; 
}

シンプルふるい法:

INT VIS [MAXN]、P [MAXN]、CNT;
 // 篩過し[2、n]は、すべての素数間
 @ 複雑:O(ログN-N-)
ボイド naive_sieve(INT N-){
     ためINT I = 2、I <= N; ++ I){
         IF(VIS [i])とPは[CNTが++] =!私;
         // 以外I自体のすべての倍数を選別
        するためのint型 J =私+; Jが<= N-; = J + I){ 
            VIS [J] = 1 ; 
        } 
    } 
}

エジプトスタイルのふるい法:

INT VIS [MAXN]、P [MAXN]、CNT;
 // 篩過し[2、n]は、すべての素数間
 @ 複雑:O(N-N-ログログ)
ボイド eratosthenes_sieve(INT N-){
     ためのint型 I = 2 ; I <= N; ++ i)が{
         IF(!VIS [I]){ 
            Pは[CNT ++] = I;
             //を除いて私自身のすべての倍数を選別
            するためのINT J =私は+ ; J <= N - 、= J + I){ 
                VIS [J] = 1 ; 
            } 
        } 
    } 
}

オイラーふるい(ふるいリニア):

INT VIS [MAXN]、P [MAXN]、CNT;
 // 篩過し[2、n]は、すべての素数のうち、
 @ 複雑:O(N-)
ボイド euler_sieve(INT N-){
     ためint型 = Iを2。 I <= N; ++ I){
         IF(VIS [I])P [CNT ++] =!I;
         のためのINT J = 0私は* P [J] <= N-; ++ J){ 
            VIS [I P * [J] = 1 ;
             // P [j]はiがP [j]が最も小さい素数である*が確保
            IF(I%P [j] == 0BREAK ; 
        } 
    }
}

唯一の分解定理(算術の基本定理)

 (固有の因子分解定理)各々が1より大きい自然数だけ一方向に書き込み、サイズによってその後素因数は、素数の積として書き込むことができます。

105 = 3×5×7

200 = 2×2×2×5×5 = 23×5 2

素因数の累乗の積として書かれ、X = P1 k1をp2とK2 P3はK3···PN KN

数が素因数が含まれていない場合、それは0とみなすことができます 

乗算の数に対応する減算する素因数の分割数に対応し、追加された素因数であります

多くの要因は、すべて別の素因数に等しい回数に対応する素数よりも大きい場合、それは分割することができます

素因数分解

// xの素因数分解は、結果は大Pに小さなに格納されている[]、素因数の数が返される
整数因数分解(int型のx、int型P []){
     int型 CNT = 0 ;
     // 2から列挙する√xを除数か否かが判断される
    ためint型 = Iを2 ;私は= xを<*; ++ I){
     // 除数を見つけた場合は、からXへ連続的に除去される
        一方、(I%のX == 0 ){ 
            P [CNT ++] = I; 
            X / = I; 
        } 
    } 
    // X> 1の場合、残りのXは素数であるが、アレイに
    IF(X> 1)P [CNT ++] =のX。
    リターンCNT; 
}

最大公約数(GCD)

最大の数に共通する自然数約2までの(最大公約数)を、定義すると、その共通分母と呼ばれている(最大公約数)

そして、独自の分解定理の帰結を使用して、それがGCD 2素数の数が最小ファクタを取った後に得られた番号に対応することが判明しました

実用的なアプリケーションでは、通常のユークリッドアルゴリズムは、最大公約数を計算します

ユークリッドアルゴリズム(ユークリッドの互除法)

補題(削除部門の原則)

任意の自然数、GCD(0、A)= GCDの定義について(0)=。その後、任意の自然数について、B、満足GCD(A、B)= GCD(B MOD A) 

この性質を利用するとゼロになるまで、B、大きな収縮の両方であり得ます

各時間は、少数の大規模な数を減らす少なくとも半分を法ので、複雑さはO(最大ログ(B))であります

ユークリッド

// 循环实现
INT GCD(INT A、INT B){
     一方(A> 0 ){
         int型 T = Bの%
        B = A。= T; 
    } 
    戻りB。
} 
// 递归实现
INT GCD(INT A、INT B){
     場合(== 0リターンB。
    戻り GCD(Bの%のA、A)。
}

最小公倍数(LCM)

(最小公倍数)は、2つの自然数最小公倍数と呼ばれる最も小さいものの公倍数の定義(最小公倍数)

そして、独自の分解定理の帰結を使用して、それがLCM 2素数の数が要因最大を取った後に得られた番号に対応することが判明しました

また限り式は問題GCDに変換することができるように、シークする必要がありません 

LCM(A、B)= ABのGCD(a、b)は

唯一の分解定理を証明するために使用することができます

拡張ユークリッドアルゴリズム

定理(定理シュウペイ)

任意の整数A、Bは、整数(x、y)の無限に多くのペアが存在= dで不定方程式斧+を満たし、ここで、d = GCD(a、b)は

GCDを求めながら(A、B)=による斧+整数不定方程式の解の集合をD(Aは、Y、X程度)を得ることができます

再帰的計算を考える:想定= D(Bの%を、A)溶液(X0、Y0)を満たす(Bの%のA)X0 + AY0のセットを働いてきたし

( - ⌊⌋BA X0 Y0)+ BX0 = Dこれは= D•与える仕上げ(BA⌊⌋BA)X0 + AY0を得ることができ

= D + BY0 - 便宜上、交換X0とY0は、(BA⌊⌋Y0 X0)を得ました

拡張ユークリッドアルゴリズム

// 戻りGCD溶液GCDの(b)およびAX + =による組(a、b)は、式
INT GCD(INT A、INTの B、INT&X、INTY){
     IF(== 0 ){
         // GCD(0、B)= B、明らかに0・0 + 1・B = B 満たす条件 
        X = 0、Yが= 1。;
         リターンBは; 
    } 
    // ここでX0を交換し、YO 
    int型 D = GCD(B%以下、A、Y、X);
     // X = X_0 - B / A \タイムズY_0
     // Y = Y_0 
    X - = B / A * Y;
     リターンD; 
}

モジュロ演算

自然数の場合は、正の整数m、MOD M =は⌊は、番号iが実際にMODのm∈[0、m)を取得することによって割り切れるように私はまた、計量⌋アム

遅い剰余演算と除算器など 

負の金型を取るしないようにしてください

金型の下の数字の意味と操作

MOD M = B MOD mは、≡のB(MOD m)を示すことができる場合 

我々は、すべての自然数を使用することができ、[0、Mの整数「代表」) 

弾性率は=キロ+ Bを満たし、⇔整数MOD M = bの(Bの∈[0、M))をK、負に拡張することができます

我々は、請求だけ0〜M、新しいデジタルコンピューティングシステムを構築することができます - 1この数mと、4つの基本的な演算ルールを確立すること

乗算を加算と同様にさらに追加する0から、1、 - Mを超えた場合に2つの数の和、 

0未満の場合は、2つの数値を減算、M - 1ダウン再び保存

32ビットの符号なし整数(unsigned int型)動作は実際には2 32を法

作業の性質

(A + B)%のM =(%のM + B型%のM)%mを

( - B)%のM =(%のM - %のM B)%mを

(B×)%M =(%のM)×(B%M)%mを

最終タイトルモジュロmの要求に対する回答は、その後、(過剰な数のを防止するために)の両方が、各ステップで計算を法とすることができる場合

逆数

 加算、減算、乗算は、どのようにそれを行うための部門を定義していますか?

配当金は、それは割り切れできるまで、Mを追加していくことができますが、この効率が低すぎます

リコール前回の学習スコアは、数で割ったとき、相反取るように変換することができます

同様に、我々は、除数逆数を見つけることを試みること、すなわちX -1のXX-1≡1(MOD m)を満たす整数

そしてmが素数である場合にのみ場合は、各番号は固有の逆数を持っているので、問題の最もOI弾性率は素数です

フェルマーの小定理

任意の素数p及び正の整数<P、そこにAP-1≡1(モッズp)の証明書については定理(フェルマーの小定理)。

(モッズp)はpは1を引き継ぐことができます - 1の間のすべての数字 - 、2A、3A ,, ...を(1 P)を証明するのは簡単

したがって・2A・3A···(P - 1)A≡(P - 1)!(モッズP)

pは素数、および1〜Pであるので - 1の間のすべての番号にプライム、それは式の両側に同時に分割することができた(p - 1)!

AP-1≡1(モッズp)を取得します

急速な反転元

フェルマーの小定理を使用すると、すぐに数の逆数を見つけることができます

(MOD P)ので、AP-2%P逆AP-2・≡AP-1≡1

フラッシュパワー、Oの複雑さによって計算することができます(ログP)

それは、拡張ユークリッドアルゴリズム、AX + PY =溶液1のセットを得ると逆元を見つけることも可能であり、Xの%pは逆要素であります

中国剰余定理(CRT)

個体数が並んで、連続して3つ以上の人の行の7、3人以上の行の5よりも、2人以上となり、数は少なくともどのくらいが求めているされていますか?

基本的には線形合同方程式を解きます

X≡A1(MOD M1)

X≡A2(MOD M2)

X≡(MOD MN)

mが互いに素であり、いくつかの可解性

 

のは、このソリューションを構築してみましょう

设M = M1×M2×···MN×、ミ= M MI

MIは他のモードmがゼロである場合にのみ、金型MIでゼロではありません

私たちは、金型MIでAIを取得したいので、tiは、金型内逆数ミマイルの意義であるaitiを、乗算する必要があります

最後a1t1M1 + a2t2M2を得+···+ antnMn、再び一般的な解決策は離れているとともに、最小数の得られた溶液に、Mを法

 

おすすめ

転載: www.cnblogs.com/Starlight233/p/11331144.html