质数判断与质数筛法

1、质数判断

bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= n / i; i++)
        if (n % i == 0) return false;
    return true;
}

2、埃拉筛

const int N = 1e5 + 10;
int primes[N], cnt;     // primes[]存储所有素数
bool st[N];             // st[x]存储x是否被筛掉

void get_primes(int n) {
    for (int i = 2; i <= n; i++)
        if (!st[i]) {
            primes[cnt++] = i;   //记录素数
            for (int j = 2 * i; j <= n; j += i) //成倍数的标识
                st[j] = true;
        }
}

3、欧拉筛

int primes[N], cnt;     // primes[]存储所有素数
bool st[N];             // st[x]存储x是否被筛掉
void get_primes(int n) {
    for (int i = 2; i <= n; i++) {
        if (!st[i]) primes[cnt++] = i;
        for (int j = 0; primes[j] <= n / i; j++) {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
    }
}

4、分解质因数

void divide(int x) {
    for (int i = 2; i <= x / i; i++) //到sqrt就够了
        if (x % i == 0) {
            int s = 0;
            while (x % i == 0) x /= i, s++;
            cout << i << ‘ ‘ << s << endl;
        }
    //如果还没有除开,就是还需要写一个
    if (x > 1) cout << x << ‘ ‘ << 1 << endl;
    cout << endl;
}

质数判断与质数筛法

上一篇:Salesforce: 动态组件


下一篇:reduce 和 reduceByKey