基本的な算術の定理はすぐに約数--lightoj1208の数を見つけます

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#defineは長い長いっ
 の#define MAXN 1000005 BOOL VIS [MAXN]。
int型のmは、[MAXN]素数。
無効{INIT()の
     ためのint型、I = 2 ; iがMAXNを<Iは++ ){
         場合(!VIS [i])と
            プライミング[ ++ M] = iは、
        INT J = 1 ; J <= Mであり、j ++ ){
             場合(素数[J] * I> = MAXN)ブレーク
            VIS [素数[J] * I] = 1

;
            もし(I%素数[J] == 0ブレーク
        } 
    } 
} 

/ * 基本算数定理* /  
LL計算値(LL n)で{ 
    LL RES = 1 以下のためにint型 I = 1 ; I <= M &&素数[I] *素数[I] <= N; iは++ 場合(N%素数[I] == 0 ){ 
            LLのCNT = 1 一方、(N%素数[I] == 0  ++ CNT、N / A = 素数[I]。
            RES * = CNT; 
        }
    もし(N> 1)のRES =のRES * 2 リターンのres; 
} 

int型のmain(){ 
    INIT()。
    int型の T; cinを>> トン。
    INT TT = 1 ; TT <= T; TT ++ ){ 
        LL N。
        scanf関数(" %のLLD "、&N)
        printf(" ケース%D:%LLDする\ n "、TT、CALC(N) - 1 )。
    } 
}

 

おすすめ

転載: www.cnblogs.com/zsben991126/p/11130623.html