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を再生します。