スマートステファニー「から6.3演習2」

ピットを残し、書きません...

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型の N = 44725 ;
INT S、P [N]、ANS [N]。
BOOL VIS [N]。
ボイドget_prime(){
     ためint型 I = 2 ; iは= N <; ++ I){
         場合(VIS [I]!)P [++のp [ 0 ] = I。
        INTの J = 1 ; J <= pが[ 0 ] && iがP [j]は<= N *; ++ j)を{ 
            VIS [iが Pを* [J] = 1 もし(I%P [J] == 0ブレーク; 
        } 
    } 
} 
インラインブール PD(INT X){
     もし(x == 1戻り 0 ;
    INT TMP = SQRT(X)。
    以下のためにint型 I = 2 ; I <= TMP; ++ I)の
     場合(Xの%I == 0戻り 0 ;
    リターン 1 ; 
} 
ボイド DFS(int型のx、int型今、INT RES){
     場合(今== 1){ANS [++ ANS [0 ] =のRES。返す;}
     場合(現在> P [X] && PD(NOW- 1 ))
        [ANS ++ ANS [ 0 ] =のRES *(NOW- 1 )。
    int型 I = xを、P [I] * P [I] <=今; ++ I){
         ためINT T = P [i]を、J = P [I] + 1 ;今J <=; T * = P [i]は、J + = T)
         場合には(現在%のJの== 0)DFS(I + 1、今/ jは、* resは)T。
    } 
    
} 
int型のmain(){ 
    get_prime()。
    しばらく(〜のscanf(" %d個"、& S)){
        年間[ 0 ] = 0 ; 
        DFS(1、S、1 ); 
        ソート(年齢 + 1、+年年間[ 0 ] + 1 ); 
        printf(" %d個の\ n "、年[ 0 ])。
        以下のためにint型 i = 1 ; iは年間[< 0 ++;] I)
        (printfの" %dを" 、年[I])。
        もし(年間[ 0 ])のprintf(" %d個の\ nを"、年[年[ 0 ]);
    }
    リターン 0 ;    
}

 

おすすめ

転載: www.cnblogs.com/huihao/p/11795768.html