エラトステネスオイラー関数のふるいです
コード:
INT PHI(INT N) { int型ANS = N、MM = SQRT(N)。 以下のために(INT I = 2; iは=ミリメートル<; iは++){ IF(N%I == 0) { ANSの=のANS / Iが*(I-1)。 一方、(N%のI == 0)N / = I。 } } もし、(N> 1)ANS = ANS / N *(N-1)。 ANSを返します。 }
ふるいオイラー線形関数:
無効Yilin()
{
ファイ= 1 [1];
のため(int型I = 2; I <= N-;私は++)
{
IF(VIS [I]!)
{
総理[++ CNT] = I;
ファイ[I] = I-1;
}
のための(INT J = 1; J <= CNT && I *をプライム[J] <= N; J ++)
{
VIS [I *はプライム[J] = 1;
IF(I%のプライム[J] == 0)
{
ピーは[iが素数* [J] =ファイ[I] *プライム[J]; // もしプライム[j]はiが素因数は、式によれば、
私は素数[j]を*既に含まれていますすべての素因数を
破る; //保証をスクリーニングすることが一度
}
ファイ[プライム* I [J]ファイ= [I] *(プライム[J] -1);
}
}
}
ライナーふるい約:
init()メソッドを無効に
{ 和[1] = 1。 以下のために(INT I = 2; iは= N <; iは++) { IF(VIS [I]!) { プライム[++ CNT] = I。 SPの[I] = I + 1; //最小质因子那项的等比数列和 } ための(int型J = 1; J <= CNT; J ++) { VIS [i *が素数[J] = 1。 IF(I%プライム[j] == 0) { 合計=(SUM [I] / SP [I])*(SP [i]が*プライム[J] +1)[iが素数[J] *]と、 SP [私が総理* [J] = SP [i]は*プライム[J] +1; ブレーク; } 和[iが素数* [J] =和[I] *和[J] [プライム]。 SP [私はprmieを* [J] =プライム[J] +1; // SP [i *が、プライム[J] = SP [プライム[J]] } } }
スクリーンの数とほぼ線形の数
NUM []格納された最小品質係数の出現
D []除数の数が格納されています
INIT()を無効 { ため(INT I = 2; iが++; iが<= N) { IF(VIS [I]!) { プライム[++ CNT] = I。 D [I] = 2; NUM [I] = 1。 } のために(int型のJ = 1; J <= iが素数[j]を* && CNT <= nであり、j ++) { VIS [iが素数* [J] = 1。 IF(I%プライム[j] == 0) { D [iが素数* [J] = D [I] /(NUM [I] +1)*(NUM [I] +2)。 NUM [i *が、プライム[J] = NUM [i]の1を、 ブレーク; } 、D = D [iが素数[J] *]を[I] * D [プライム[J]。 NUM = 1 [私がj] [プライム*]。 } } }
リニア画面メビウス関数
コード:
ミュー[N]、PRI [N]、TOT、ZHI [N] INT。 ボイドふるい() { ZHI [1] = MU [1] = 1。 以下のために(INT I = 2; iは= N <; iは++) { IF(ZHI [I]!)PRI [++ TOT = I、ミュー[I] = - 1。 用(INTのJ = 1; J <= TOT && iはPRI [j]を* <= nであり、j ++) { ZHI [i *がPRI [J] = 1。 IF(I%PRI [J])、μ= [Iは、PRI [J] *] -ミュー[I]を、 他{MU = 0 [iがPRI [J] *]を、破ります;} } } }