2013-team5/prime

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
/*
    素数和欧拉函数
    O(n)
    cnt < 4000
    By Kotomi
*/


const int maxPrime = 1000001;
int Eul[maxPrime];
int prime[maxPrime];

int Prime(int n = maxPrime)
{
    memset(Eul, 0, sizeof(Eul));
    Eul[1] = 1;
    int cnt = 0;
    for (int i = 2; i < n; i++){
    if (!Eul[i]){
            prime[cnt++] = i;
            Eul[i] = i - 1;
        }    
    for (int j = 0; j <= cnt; j++){
        if (i * prime[j] >= n) break;
        Eul[i * prime[j]] = 1;
        if (i % prime[j] == 0){
                    Eul[i * prime[j]] = Eul[i] * prime[j];
                    break;
                }
            else
                Eul[i * prime[j]] = Eul[i] * (prime[j] - 1);
    }
    }
    return cnt;
}

}}}
/*
    素数和欧拉函数
    O(n)
    cnt < 4000
    By Kotomi
*/
const int maxPrime = 1000001;
int Eul[maxPrime];
int prime[maxPrime];
int Prime(int n = maxPrime)
{
    memset(Eul, 0, sizeof(Eul));
    Eul[1] = 1;
    int cnt = 0;
    for (int i = 2; i < n; i++){
    if (!Eul[i]){
            prime[cnt++] = i;
            Eul[i] = i - 1;
        }    
    for (int j = 0; j <= cnt; j++){
        if (i * prime[j] >= n) break;
        Eul[i * prime[j]] = 1;
        if (i % prime[j] == 0){
                    Eul[i * prime[j]] = Eul[i] * prime[j];
                    break;
                }
            else
                Eul[i * prime[j]] = Eul[i] * (prime[j] - 1);
    }
    }
    return cnt;
}