結果
問題 | No.1022 Power Equation |
ユーザー |
![]() |
提出日時 | 2020-04-10 23:20:05 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,395 bytes |
コンパイル時間 | 1,743 ms |
コンパイル使用メモリ | 168,972 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-16 00:44:38 |
合計ジャッジ時間 | 2,875 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 1 |
other | WA * 8 |
ソースコード
#include <bits/stdc++.h>using namespace std;int logfloor(int a, long long b){//floor(log_a(b))if (a > b){return 0;} else {int res = 1;long long A = a;while (A * a <= b){A *= a;res++;}return res;}}bool is_power(long long a){//aがべきならtrueint X = logfloor(2, a);X++;for (int i = 2; i <= X; i++){//aのi乗根long long Y = pow(a, (double) 1 / i);long long Z = pow(Y, i);if (Z == a){return true;}Y++;Z = pow(Y, i);if (Z == a){return true;}}return false;}int main(){int T;cin >> T;vector<bool> power(40000);for (int i = 2; i < 40000; i++){power[i] = is_power(i);}for (int i = 0; i < T; i++){long long N;cin >> N;long long ans = N * N * 2 - N;bool two = false;for (int j = 2; j * j <= N; j++){//j: baseif (power[j]){continue;}if (two){ans += N / 2 * 2;} else {int X = logfloor(j, N);if (X == 2){two = true;}long long A = 0;for (int k = 2; k <= X; k++){for (int l = 2; l <= X; l++){if (k != l){int p = __gcd(k, l);A += N / max(k / p, l / p);}}}ans += A * 2;}}cout << ans << endl;}}