题解
2025-06-07 19:15:22
发布于:浙江
8阅读
0回复
0点赞
要用到欧拉筛法哦!这样才能O(1)
def sieve(n):
isprime=[True]*(n+1)
prime=[]
for i in range(2,n+1):
if isprime[i]:
prime.append(i)
for p in prime:
if p*i>n:
break
isprime[p*i]=False
if i%p==0:
break
return prime
print(len(sieve(int(input()))))
全部评论 1
#include <iostream>
#include <vector>
using namespace std;int main() {
int n;
cin >> n;
if (n < 2) {
cout << 0 << endl;
return 0;
}vector<bool> is_prime(n + 1, true); is_prime[1] = false; for (int i = 2; i * i <= n; ++i) { if (is_prime[i]) { for (int j = i * i; j <= n; j += i) { is_prime[j] = false; } } } int cnt = 0; for (int i = 2; i <= n; ++i) { if (is_prime[i]) cnt++; } cout << cnt << endl;}
6小时前 来自 浙江
0










有帮助,赞一个