コンセプト
ドメインは、正の整数関数は数論の関数です。
Pを設け、Qは互いに素では、fは[P * Q] = F [P] * F [Q]、Fは乗法関数と呼ばれます。除数、オイラー、メビウス。
P、Qのいずれか、[P * Q] fはF [P] * [Q] F =乗法関数fと呼ばれるが、完了しました。一つの機能として、すなわち、[I] 1 = F。
私たちは、ほぼ線形のふるいは、事前に乗法関数とすることができる使用します。
オイラーのファイ
ボイドphii() { PHI [ 1 ] = 1 。 以下のために(int型 I = 2 ; I <= MAXN; iは++ ) { 場合(!not_prime [I]) { プライム[ ++ TOT = I。 PHI [i]は = I- 1 。 } のための(INT J = 1 ; J <= TOT &&プライム[J] * I <= MAXNあり、j ++ ) { not_prime [iが = J] [プライム*] 1 。 もし(I%、プライム[J] == 0 ) { 非[私は =非[I] *プライム[J] *] プライム[j]を、 破ります; } そうでない=非[I] * [iがj]は[プライム*] ノン[J]プライム]。 } } }
メビウスミュー
無効INITを() { [notp 1 ] = 1 ; MUは、[ 1 ] = 1 。 用(int型 iは= 2 ; I <= MAXN ++ I) { 場合(!notp [I]) -プライム[++ TOT = I、ミュー[I] = 1 。 用(LLのJ = 1 ; J <= TOT && i *が素数[J] <= MAXN; ++ j)の { [iがnotpプライム* [J] = 1 。 場合(I%のプライム[J] == 0 ) { MUは[iが素数* [J] = 0 ; //方形備える BREAKを; } 他には、MU [I] - MU [プライム* I [J] = // プライム++の数 } } }
除数
1は、除数を求めている1は、除数の数を求めている二人は、ある約数
(原因を戦うために手をしたくない)から取られているこのブログ
1が忘れてしまったときに再生しないでください
無効INITを() { NOTPの[ 1。 =] 1。 [YS 1 ] = 1 ; DDの[ 1。 =] 1。; // 数の除数YS、素因数のDD最小数 のために(RE INT I = 2、I <= 50000 ; ++ I) { IF(NOTP [I])プライム[TOT ++] = I、YS [I] =!2、DDの[I] = 1 ; のための(LL J =再1。 ; J <プライム&& * Iは、TOT = [J] <= 50000 ; ++ J) { NOTP [Iは *プライム[J] = 1 ; IF(I%プライム[J] == 0 ) { YSは[Iは *プライム[J]のYS = [I]は/(DD [I] + 1)*(DD [I]は+ 2 ); DD [Iは *プライム[J] = DDの[I] + 1 ; BREAK ; } 他 { YS [Iが素数* [J]のYS = [I] * 2 ; // 自然の(乗法関数の数の素数除数の数2 =) DD [i *が素数[J] = 1 ; // プライム[J]はIであり、iは素数[j]を*は最小素因数 } } } }
無効INITを() { NOTPの[ 1。 =] 1。 ; SDの[ 1。 =] 1。 ; [SPを1 ] = 1 ; // SDおよび数、最小の品質係数で構成されると理解することができるSP多項式最小素因数(約除数番号とバー) のための(RE INT I = 2 ; I <= 50000 ; ++ I) { IF!(NOTP [I])プライム[TOT ++] = I、SD [I] = I +は1。、SP = I +は1。; のための(LL J =再1。 ; J <= TOTプライム&& * I [J] <= 50000 ; ++ J) { NOTP [Iは *プライム[J] = 1; もし(I%プライム[j] == 0 ) { SD [iが素数* [J] = SD [I] / SP [I] *(SP [I] *プライム[J] + 1 )。 SP [私は = SP [i]は*プライム[J] + J] [プライム*] 1 。 破ります; } 他 { SDは[iが素数* [J] = SD [i]は* SD [J] [プライム]。 SP [iの *プライム[J] =プライム[J] + 1 ; } } } }