φ展開

 

 

サンプル入力

11 10

サンプル出力

10
5
7
5
8
3
9
5
7
4
10

 

 (喜喜喜が、唯一のに役立ついくつかdalaoのノウハウを得るために、あなたがメモリ内になければなりません)

この質問はああ包含と除外の使用であり、

#include <ビット/ STDC ++ H>
 に#define LL長い長い
 使用して 名前空間STDを、

const  int型 N = 100005 ;
整数nは、素数[N]、TOT、CNT。
BOOL VIS [N]。
LL M、NUM [N]、ANS。

ボイドgetprime(){
     INT iは= 2、I <= N; I ++ ){
         場合(!VIS [I])
            プライム[ ++ TOT = I。
        以下のためにINT J = 1 ; J <= TOT && iが素数[j]を* <= nであり、j ++ ){ 
            VIS [I*プライム[J] = ;
            もし(I%プライム[J] == 0 ブレーク
        } 
    } 
} 

ボイドワーク(INT N){
     ためINT iは= 1 ; I <= TOT &&プライム[I] <= N; I ++ ){
         int型 X = プライム[I];
        もし(N%X == 0 ){ 
            NUM [ ++ CNT] = X。//  
            一方(N%X == 0 
                N / = X。
        } 
    } 
}

// その互いに素ではないが失われ、残りは友人の数に素数である 
 // 均等に確認してください、彼はそれに総理の素因数ではないことを、自分の彼の素因数を探して、カットにそれをかじることが素数でない
のボイド DFS(INT A、INT P、INT S){ // 数pは、約、S、正または負の(プラスまたはマイナス)であり、
    IF(!A){ 
        ANS + =(LL)* S M / P; // M / pはp型の数mの倍数である
        リターン; 
    } 
    // 素因数の数を見る- >に加え、2 - >保存、3 - >プラス... 
    DFS( - 1 、P、S) ; 
    DFS(A - 1、* P NUM [A]、 - 1。 * S);
     / * 例えば、そこ因子3,4,5- 
                / \ 
                     1
                  / \
               1. 3 
             / \ / \ 
           。3. 1. 4. 3. 4 * 
          / \ / \ / \ / \ 
      。3 * *。4. 5. 4. 3. 3 * * *。5. 4. 5. 4. 3. 1. 5 
    * / 
} 

(メイン符号付き){ 
    CIN >> N- >> M; 
    getprime(); // 素数テーブル
    のためのINT I = 1 ; I <= N I ++ ){ 
        ANS = 0 ; 
        CNT = 0 ; // 品質因子数 
        ワーク(I); // iを見つけます素因数の数 
        DFS(CNT、1);1つ
        printf(" %のLLD \ n " 、ANS)。
    } 
}

 

おすすめ

転載: www.cnblogs.com/aprincess/p/11805792.html