オイラー脚本テーブル

1  CONST  INT N = 1E7;
 2  INTファイ[N + 10 ]、プライム[N + 10 ]、TOT、ANS;
 3  BOOLマーク[N + 10 ];   
 4  ボイドgetphi(){    
 5。    int型I、J;    
 6     [ピー。1 ] = 1 ;    
 7     のための(I = 2 ; iが<= N; iが++ ){    
 8         のiF(!{マーク[I])    
 。9               プライム[++ TOT = I; // ふるいプライムタイムの数は、最初のiがあるか否かを判断しますプライム。    
10               ファイ[I] = I-1 ; // iは素数ピピであれば、[I] = I-1     
。11               }    
 12である        ため(J = 1 ; J <= TOT; J ++ ){    
 13は           IF(iは*プライム[J]> N)   BREAK ;    
 14            マーク[Iが素数* [J] = 1 ; // 素数でないiが素数[j]を*決定     
15            IF(I%がプライム[j] == 0){ // 次に、我々は私かどうかプライム[j]を検索します約数     
16               、ファイ=ピー[I] *プライム[J] [Iは、[J]素数を*] BREAK ;    
 17            }    
 18が           他の - =ファイ[I] *(プライム[J] [Iは[J]素数を*]ファイ1);// 実際には、ここでプライム[j]が-1であるPHI [プライム[J]、オイラー関数の積を用いて、     
19         }    
 20     }    
 21  } 
 22  // 呼び出され、所与getphi()、ファイ[しますi]は、それ以外の場合は合成数であり、偽のノートは素数であります

各コールは)(getphiが与えられます。

〜[] nは1との間に充填されたテーブルPHIを再生します。

おすすめ

転載: www.cnblogs.com/St-Lovaer/p/11415515.html