Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
`+` Ý tưởng
`@` Một số có đúng `9` ước là số có dạng `(xy)^2` (với `x` và `y` là hai số nguyên tố khác nhau) hoặc `x^8` (với `x` là một số nguyên tố)
`+` Code (Limit: `n \leq 10^9`)
#include <bits/stdc++.h>
#define ll unsigned long long
using namespace std;
vector<int> primes;
void SieveOfEratosthenes(int n){
bool prime[n + 1];
memset(prime, true, sizeof(prime));
for (int p = 2; p * p <= n; p++) {
if (prime[p] == true) {
for (int i = p * p; i <= n; i += p) prime[i] = false;
}
}
for (int p = 2; p <= n; p++)
if (prime[p]) primes.push_back(p);
}
int main(){
int n;
cin >> n;
SieveOfEratosthenes(50001);
int ans = 0;
int pl = primes.size();
for (int i = 0; i < pl; i++){
ll tmp = pow(primes[i], 8);
if (tmp <= n and tmp > 0) ans++;
for (int j = i + 1; j < pl; j++){
ll tmp = pow((primes[i]*primes[j]),2);
if (tmp <= n and tmp > 0) ans++;
}
}
cout << ans;
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin