それは、次の2つのプロパティがあります。
IF(GCD(I、プライム[J])== 1 ) ファイ[Iはファイ=プライム[J] *]を[I] * ファイ[プライム[J]]; // 乗法関数ので。PHI [プライム[j]が]実際プライム[J]である-1。 他の ファイ[I *プライム[J]ファイ= [I] *プライム[J]。
方法は素数テーブルを決定しつつ、本方法は、再帰的ために、エッペンドルフふるいを模倣することができます。
F.(I、1、N-)ファイ[I] = I; // 等価not_prime []役割 F(I、1 、N-){ IF(ファイ[I] == I)ファイ[I] = I - 。1、プライム[CNT ++] = I; F(J、1 、CNT){ IF(%プライムI [J] == 0)// 等価GCD(I、プライム[J] )!1 = ファイ[プライム* I [J]ファイ= [I] * ファイ[プライム[J]; 他 ファイ[Iはファイ=プライム[J] *]を[I] * プライム[J]; } }
あなたはオイラー、この線形最適化と同じ方法をスクリーニングするために最適化されたエリクセン画面のようになりたい場合や、また、我々は唯一の行を追加する必要があります。
F(I、1、n)が非[I] = I。 F(I、1 、N){ 場合(非[I] == I)の非[I] = I - 1、プライム[CNT ++] = I。 F(J、1 、CNT){ 場合(I%のプライム[J] == 0 ){ 非[iが素数* [J] =非[I] * 非[プライム[J]。 破ります ; // 这里加了一行 } 他の 非[私が総理* [J] =非[I] * プライム[J]。 } }