2 条题解
-
0
本题直接暴力貌似要跑好长时间,可能是我暴力写错了,这道题可以先使用欧拉筛将质数都先筛出来,之后枚举q来二分查找p,那这道题就出来了
#include<cstdio> #include<iostream> #include<vector> #include<map> #include<cstring> #include<array> #include<queue> #include<algorithm> #include<set> #include<cmath> using namespace std; using i64=long long; //using i128=__int128; const i64 INF=1e18; const int mod=998244353; //const int N=1e9+7; const int N=300; int primes[N],cnt=0; bool vis[N]; void init(){ for(int i=2;i<=N;i++){ if(!vis[i])primes[++cnt]=i; for(int j=1;i*primes[j]<=N;j++){ vis[i*primes[j]]=true; if(i%primes[j]==0)break; } } } void solve(){ init(); i64 ans=0; int k=20250309; for(int i=1;i<=cnt;i++){ i64 q=primes[i]; i64 q_sub=q*q*q; //找到符合题意p的最大值 i64 max_p=k/q_sub; max_p=min(max_p,q-1); if(max_p<2)continue; //进行二分查找 int pos=upper_bound(primes+1,primes+1+cnt,max_p)-primes; ans+=distance(primes+1,primes+pos); } cout<<ans<<'\n'; } int main(){ int _=1; //cin>>_; while(_--)solve(); return 0; }
信息
- ID
- 301
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 131
- 已通过
- 41
- 上传者