結果
問題 |
No.3236 累乗数大好きbot
|
ユーザー |
![]() |
提出日時 | 2025-08-15 22:11:43 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,311 bytes |
コンパイル時間 | 1,951 ms |
コンパイル使用メモリ | 210,720 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-08-15 22:12:30 |
合計ジャッジ時間 | 13,678 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 4 TLE * 2 -- * 25 |
ソースコード
/* from collections import defaultdict def prime_factorize(n): # https://note.nkmk.me/python-prime-factorization/ a = defaultdict(int) while n % 2 == 0: a[2] += 1 n //= 2 f = 3 while f * f <= n: if n % f == 0: a[f] += 1 n //= f else: f += 2 if n != 1: a[n] += 1 return a def sieve_of_eratosthenes(n): # https://af-e.net/python-sieve-of-eratosthenes/ primes = [True] * (n + 1) p = 2 while (p * p <= n): if primes[p]: for i in range(p * p, n + 1, p): primes[i] = False p += 1 return [p for p in range(2, n + 1) if primes[p]] p = sieve_of_eratosthenes(10**6) ans = [] Q = int(input()) for _ in range(Q): N = int(input()) a = set(prime_factorize(N).values()) for i in range(60,0,-1): if(all([x%i == 0 for x in a])): ans.append(str(i)) break print("\n".join(ans)) */ #include <bits/stdc++.h> using namespace std; unordered_map<long long,int> prime_factorize(long long n){ unordered_map<long long,int> a; while (n % 2 == 0){ a[2]++; n /= 2; } long long f = 3; while (f * f <= n){ if (n % f == 0){ a[f]++; n /= f; } else { f += 2; } } if (n != 1) a[n]++; return a; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int Q; if (!(cin >> Q)) return 0; vector<string> ans; for (int qi = 0; qi < Q; ++qi){ long long N; cin >> N; auto fac = prime_factorize(N); unordered_set<int> exps; for (auto &kv : fac) exps.insert(kv.second); // replicate Python's behavior: if exps is empty, all([]) is True, so first i (60) is chosen. for (int i = 60; i >= 1; --i){ bool ok = true; for (int x : exps){ if (x % i != 0){ ok = false; break; } } if (ok){ ans.push_back(to_string(i)); break; } } } for (size_t i = 0; i < ans.size(); ++i){ if (i) cout << '\n'; cout << ans[i]; } cout << '\n'; return 0; }