リニアふるい素数:
ボイド getxxs(INT N){ ため(INT iは= 2、I <= N; I ++ ){ V [I] = 1 。 } 以下のために(INT iが= 2 ; I <= N I ++ ){ 場合(V [I] == 1 ){ プライム[ ++ NUM] = I; } 以下のために(INT J = 1 ; J <=は&& iが素数[j]を* NUM <= N; J ++ ){ V [iのプライム[jは*]] = 0 ; もし(I%プライム[j] == 0 ){ ブレーク。 } } } }
リニアふるいオイラー機能:
ボイド getxxs(INT N){ ため(INT iは= 2、I <= N; I ++ ){ V [I] = 1 。 } 以下のために(INT iが= 2 ; I <= N; I ++ ){ 場合(V [I]){ プライム[ ++ NUM] = I; 非[I] = I- 1 。 } 用(INT J = 1 ; iが素数[j]を* <= N && J <= NUM; J ++ ){ V [iのプライム[jは*]] = 0 ; もし(I%プライム[j] == 0 ){ PHI [Iプライム* [J] = PHI [i]は* プライム[J]。 休憩; } 他{ 非[私は =非[I] *(プライム[J] - [J]プライム*] 1 )。 } } } }
メビウスふるい線形関数:
getxxs(INT N){ ため(INT iは= 2、I <= N; I ++ ){ V [I] = 1 。 } MU [ 1 ] = 1 。 以下のために(INT iが= 2 ; I <= N; I ++ ){ 場合(V [I]){ プライム[ ++ NUM] = I; ミュー[I] = - 1 。 } 以下のために(INT J = 1 ; J <=は&& iが素数[j]を* NUM <= N; J ++ ){ V [iのプライム[jは*]] = 0 ; もし(I%プライム[j] == 0 ){ ミュー[私が総理* [J] = 0 ; 休憩; } 他{ ミュー[ *最初の[J] = - ムー[i]は、 } } } }