优化
2026-02-03 20:37:02
发布于:广东
160阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int maxxp[1000001],n,b;
int main(){
cin>>n>>b;
// 数组maxxp[i]存储数字i的最大质因子,初始化全为0
// 埃氏筛核心:遍历所有数,标记每个合数的最大质因子
for(int i=2;i<=n;i++){
// 如果maxxp[i]为0,说明i是质数
if(maxxp[i]==0){
// 遍历i的所有倍数,将其最大质因子更新为当前质数i
for(int j=i;j<=n;j+=i)
max_prime[j]=i;
}
}
// 数字1是特殊的B-smooth数,初始计数为1
int count=1;
// 遍历2~n,判断最大质因子是否<=b,符合则计数+1
for(int i=2;i<=n;i++){
if(maxxp[i]<=b)
count++;
}
// 输出最终结果
cout<<count;
return 0;
}
全部评论 3
还有就是埃氏筛你可以包装成函数
void init(){ for(int i=2; i<=n; i++) if(maxxp[i]==0) for(int j=i; j<=n; j+=i) maxxp[j]=i; }2天前 来自 辽宁
0有一个问题:max_prime你未定义,应该是maxxp吧
2天前 来自 辽宁
0?
2026-06-26 来自 北京
0



















有帮助,赞一个