文章

1

粉丝

321

获赞

0

访问

9.1k

头像
1156 通过75% ??
我要提问
发布于2021年1月13日 13:24
阅读数 9.1k

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1000000;

bool isPrime[maxn];
//素数筛选
void getPrime() {
    for (int i = 0; i < maxn; i++) {
        isPrime[i] = true; //假设全部为素数
    }
    for (int i = 2; i < maxn; i++) {
        if (isPrime[i]) { //如果i是素数,其K倍标记为 false;
            for (int k = 2; k*i < maxn; k++) {
                isPrime[k*i] = false;
            }
        }
    }
}

int main() {
    int n;
    getPrime();
    while (cin >> n) {
        int ans = 0;
        for (int i = 2; i < maxn; i++) {
            if (isPrime[i] && i <= n) { // 如果它是素数且小于等于n
              &n...

登录查看完整内容


登录后发布评论

1 条评论
YGJing7
2021年1月13日 15:26

在最后输出ans前面加上一个if(n > 1) ans++;

因为当n接近于10^9时,那个质因数超出isPrime[1000000] 范围。

赞(1)