[アルゴリズム/テンプレート]の素因数分解

[アルゴリズム/テンプレート]の素因数分解

の素因数分解の最初に、基本的な定理

\(\でN \(FORALL \ inftyの)\ 1) ユニークな素数の有限数の積に分解することができる、のように書くことができる:
\ [^ {N P_1 = ^ {P_2のC_1とC_2}} ... {^ P_M C_m } \]
ここで、\(C_I \)は正の整数であり、\(P_I \)を満たす素数である\(P_1 \ P_2 LT \ ... LT \ P_M LT \)を

私たちは〜2スキャンすることができます\(\ sqrtのN \) Nで割り切れるkが、その後、私たちはしばらく蓄積取り除かK、Nからすべての係数kを削除する場合は、数kのそれぞれの数を。
合成数Nに結合して走査前の因子の特定の数は、それがから除去されるため、したがって特定の数割り切れるNが素数でスキャンします。
[2、Nが最終でない場合、なお\(\ SQRT N \) 割り切れる]次にNが素数であり、それは直接統合されています。
要約すると、時間の複雑さの素因数分解である\(O(\ sqrtのN)\)

第二に、テンプレート - 素因数分解

コードは以下の通りであります:

inline void Divide(){
    cnt=0;
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
            p[++cnt]=i;
            while(n%i==0){
                num[cnt]++;
                n/=i;
            }
        }
        if(n>1){
            p[++cnt]=n;num[cnt]=1;
        }
    }
}//其中p为底数,num为对应的指数 

おすすめ

転載: www.cnblogs.com/cyanigence-oi/p/11716934.html