第一份:
#include <stdio.h>
#include <vector>
using namespace std;
long long n;
bool b[2000001];
int main() {
scanf("%lld", &n);
vector<int> v;
for (int i = 2; i <= 2e6; i++) {
if (b[i])
continue;
v.push_back(i);
for (int j = i; 1LL * i * j <= 2e6; j++)
b[i * j] = 1;
}
int x = v.size(), ans = 0;
for (int i = 0; i < x; i++)
for (int j = i + 1; (__int128)(v[i] * v[j] * v[i] * v[j]) <= n && j < x; j++)
++ans;
for (auto it : v) {
if ((__int128)(it * it * it * it * it * it * it * it) > n)
break;
++ans;
}
printf("%d", ans);
}
第二份代码:
#include <stdio.h>
#include <vector>
#define ll long long
using namespace std;
ll n;
bool b[2000001];
int main() {
scanf("%lld", &n);
vector<int> v;
for (int i = 2; i <= 2e6; i++) {
if (b[i])
continue;
v.push_back(i);
for (int j = i; 1LL * i * j <= 2e6; j++)
b[i * j] = true;
}
int x = v.size(), ans = 0;
for (int i = 0; i < x; i++)
for (int j = i + 1; (__int128)v[i] * v[j] * v[i] * v[j] <= n && j < x; j++)
ans++;
for (auto i : v) {
if ((__int128)i * i * i * i * i * i * i * i > n)
break;
ans++;
}
printf("%d", ans);
}