咋卡不过去呢,是 unordered_map 常数大吗,听说是 O(1) 的啊
测了运行次数只有一千多万次,但极限数据跑了十几秒
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q, k, cnt, tot, tot2, a[10000010], jud[1000010], su[1000010];
const int maxn = 1000000;
unordered_map <int, int> mp;
unordered_map <int, int> :: iterator p;
signed main(){
memset(jud, 1, sizeof(jud));
jud[1] = 0;
for(int i=2; i<=maxn; i++){
if(jud[i]) su[++cnt] = i;
for(int j=1; j<=cnt && i*su[j]<=maxn; j++){
jud[i*su[j]] = 0;
if(i % su[j] == 0) break;
}
}
scanf ("%lld", &n);
for (int i=1; i<=cnt; i++){
for (int j=1; j<i && su[i]*su[i]*su[i]*su[j] <= n; j++){
tot2 ++;
mp[su[i]*su[i]*su[i]*su[j]] = 1;
}
}
for (p=mp.begin(); p!=mp.end(); p++){
a[++tot] = p->first;
}
if (n < 54) return puts ("0"), 0;
printf ("%lld\n", tot);
//printf ("%lld\n", tot2);
return 0;
}