リニア乗法関数ふるいです

コンセプト

ドメインは、正の整数関数は数論の関数です。

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 ; 
            } 
        } 
    } 
}
数についてと

 

おすすめ

転載: www.cnblogs.com/yyys-/p/11285342.html