社区讨论
请求添加题解
P1835素数密度参与者 6已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lxo0ysgn
- 此快照首次捕获于
- 2024/06/21 09:41 2 年前
- 此快照最后确认于
- 2024/06/21 16:34 2 年前
rt,我的题解虽然没有讲解,但是做法十分简单,就是对根号筛的优化,易于理解,code:
CPP#include <iostream>
#include <cstring>
#include <cmath>
bool is_prime[50005];
int prime[50005],cnt = 0,ans = 0,l,r,sqrtR;
bool isPrime(int x){
if (x < 2) return false;
if (x == 2) return true;
for (int i = 1;i <= cnt && prime[i] * prime[i] <= x;i++)//只用素数判断
if (x % prime[i] == 0)
return false;
return true;
}
int main(){
std::cin.tie(0)->sync_with_stdio(0);
std::cin >> l >> r;
sqrtR = ceil(sqrt(r));
memset(is_prime,true,sizeof(bool) * sqrtR);
is_prime[0] = is_prime[1] = false;
for (int i = 2;i <= sqrtR;i++){//欧拉筛
if (is_prime[i]) prime[++cnt] = i;
for (int j = 1;j <= cnt && i * prime[j] <= sqrtR;j++){
is_prime[i * prime[j]] = false;
if (i % prime[j] == 0) break;
}
}
for (long i = l;i <= r;i++)
if (isPrime(i))
ans++;
std::cout << ans << '\n';
return 0;
}
回复
共 10 条回复,欢迎继续交流。
正在加载回复...