Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
28498 | 23级.刘展翔 | 【J】T3 | C++ | 通过 | 100 | 205 MS | 9976 KB | 1321 | 2024-04-14 20:28:14 |
#include <iostream> #include <map> #define int long long using namespace std; const int maxn = 100005; map<int, int> mp; bool is_p[maxn]; int prime[maxn], a[maxn], cnt = 1, m; int ans; void Era() { is_p[0] = is_p[1] = 0; for (int i = 2; i <= 1260; i++) is_p[i] = 1; for (int i = 2; i <= 1260; i++) { if (is_p[i]) prime[cnt++] = i * i * i; for (int j = i * 2; j <= 1260; j += i) { is_p[j] = 0; } } } int rebuild(int x) { for (int i = 1; i < cnt; ++i) { // cout << prime[i] << endl; while (x % prime[i] == 0) { x /= prime[i]; } if (prime[i] > x) { break; } } return x; } signed main() { // freopen("T3.in", "r", stdin); // freopen("T3.out", "w", stdout); int n; cin >> n; Era(); for (int i = 1, x; i <= n; i++) { cin >> x; x = rebuild(x); mp[x]++; } for (auto& [x, cnt] : mp) { if (x == 1) ++ans; else { int match = rebuild(x * x); ans += max(mp[match], cnt); mp[match] = cnt = 0; } } cout << ans << endl; // fclose(stdin); // fclose(stdout); return 0; }