文章
1
粉丝
321
获赞
0
访问
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...
登录后发布评论
在最后输出ans前面加上一个if(n > 1) ans++;
因为当n接近于10^9时,那个质因数超出isPrime[1000000] 范围。