リニアふるい1

ふるいです

\(\ \カラー{赤} {ふるいリニアプライム}巨大\)

各画面への唯一の彼の最年少素因数であることを確認してください。

void yych()
{
    for(int  i = 2; i <= maxn; i ++)
    {
        if(!vis[i]) prime[++tot] = i;
        for(int j = 1; j <= tot&&i * prime[j] <= maxn; j ++)
        {
            vis[i * prime[j]] = 1;
            if(i%prime[j] == 0) break;
         }
}

\(\巨大​​\色{赤} {筛PHI} \)

オイラー関数\(ファイ(i)は\)にIよりも小さい正の整数である\(iは\)素数の数、および式を有します

\(\ファイ(X)= X *(1- \ dfrac {1} {P_1})*(1- \ dfrac {1} {P_2})* ... *(1- \ dfrac {1} {p_k })\)

次に、どのようにふるいを検討、または3例

1. \(Iは\)が明らかである素数である\(\カラー{緑} { PHI(I)=(I-1)} \)

2. \(私は\)素数で割り切れ\(P \) その後、\(私は\)含む\(P \)素数は、その後、素数の背中が変わるが、それ自体で乗算しません\(Pを\ ) ;

\(\ファイ(I)= I *は(1- \ dfrac {1} {P_1})*(1- \ dfrac {1} {P_2})* ... *(1- \ dfrac {1} {p_k })\)

\(\ファイ(iはPを*)= IがP *(1- \ dfrac {1} {P_1})*(1- \ dfrac {1} {P_2を} *)* ... *(1- \ dfrac { 1} {p_k})\)

だから、\(\カラー{緑} {PHI(iはPを*)= PHI(I)* P} \)

3. \が(私は\)素数で割り切れない\(P \) 説明\(Iは\)が含まれていない\(P \)をこの係数は、によって元以上である\(P×(1- \ dfrac {1 {P}})\)簡略化与える。)\)\((1-Pを

\(\ファイ(I)= I *は(1- \ dfrac {1} {P_1})*(1- \ dfrac {1} {P_2})* ... *(1- \ dfrac {1} {p_k })\)

\(\ファイ(iはPを*)= IがP *(1- \ dfrac {1} {P})*(1- \ dfrac {1} {P_1を})*(1- \ dfrac {1} {P_2 })* ... *(1- \ dfrac {1} {p_k})\)

\(= I *が(P-1)*(1- \ dfrac {1} {P_1})*(1- \ dfrac {1} {P_2})* ... *(1- \ dfrac {1} {p_k})\)

だから、\(\カラー{緑} {PHI(iはPを*)= PHI(I)*(P-1)} \)

void yych()
{
    phi[1] = 1;
    for(int  i = 2; i <= maxn; i ++)
    {
        if(!vis[i])
        {
            prime[++tot] = i;
            phi[i] = (i-1);
        }
        for(int j = 1; j <= tot&&prime[j]*i <= maxn; j ++)
        {
            vis[i * prime[j]] = 1;
            if(i%prime[j] == 0)
            {
                  phi[i * prime[j]] = phi[i] * prime[j];
                break;
            }
            else
                phi[i * prime[j]] = phi[i] * (prime[j] - 1);
        }
    }
}

\(\巨大​​\色{赤} {筛MU} \)

あなたは安心し、反転とは無関係にすることができます

ふるいメビウス定義された関数:

独特の分解定理に従って

\(I = P_1 ^ {K_1} * P_2 ^ {K_2} * P_3 ^ {K_3} ... p_q ^ {k_q} \)

对于一个数\(iは\) \ [\ MU(I)= \ {ケース} 1を開始し、&​​(I = 1)\\ 0、&(\存在K、K> 1)\\( - 1) ^ Q、&(\ K FORALL、K <= 1)\端{ケース} \]

図1は、のために素数です\(私は\)明らかに、

\(\カラー{緑} {\ MU(I)= - 1} \)

2.もし\(I \)割り切れる\(P \) その後、\(I \)\(P \)少なくとも1、の元のインデックス\(私はP \ *)\(Pを\)インデックスそれは1より大きくなければなりません

\(\カラー{緑} {\ MU(iはPを*)= 0} \)

3.もしは(私が\)\割らない\(P \)を、その後、(私は\)\ではないもともと\(P \)これは、素数\(私はP \を*)素数の同等より、\ (Q = 1 + \) 偶数奇数となり、偶数奇数となります。

\(\カラー{緑} {\ MU(iはP *)= - \ MU(I)} \)

void yych()
{
    mu[1] = 1;
    for(int  i = 2; i <= maxn; i ++)
    {
        if(!vis[i])
        {
            prime[++tot] = i;
            mu[i] = -1;
        }
        for(int j = 1; j <= tot&&prime[j]*i <= maxn; j ++)
        {
            vis[i * prime[j]] = 1;
            if(i%prime[j] == 0)
            {
                mu[i * prime[j]] = 0;
                break;
            }
            else
               mu[i * prime[j]] = -mu[i];
        }
    }
}

おすすめ

転載: www.cnblogs.com/spbv587/p/11610804.html