結果
| 問題 |
No.2318 Phys Bone Maker
|
| コンテスト | |
| ユーザー |
chro_96
|
| 提出日時 | 2023-05-26 23:11:22 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 2,124 bytes |
| コンパイル時間 | 840 ms |
| コンパイル使用メモリ | 32,200 KB |
| 実行使用メモリ | 816,384 KB |
| 最終ジャッジ日時 | 2024-12-25 10:34:18 |
| 合計ジャッジ時間 | 61,526 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | MLE * 3 |
| other | MLE * 45 |
ソースコード
#include <stdio.h>
long long gcd (long long a, long long b) {
if (b <= 0LL) {
return a;
}
return gcd(b, a%b);
}
int main () {
long long n = 0LL;
int res = 0;
long long ans = 0LL;
long long mod_num = 998244353LL;
long long div[6720] = {};
int divcnt = 0;
long long e[6720][6720] = {};
int ee[6720][6720] = {};
long long c[6720][6720] = {};
int ecnt[6720] = {};
long long dp[6720] = {};
res = scanf("%lld", &n);
for (long long p = 2LL; p*p <= n; p += 1LL) {
if (n%p == 0LL) {
div[divcnt] = p;
divcnt++;
}
}
if (divcnt <= 0) {
printf("1\n");
return 0;
}
if (div[divcnt-1]*div[divcnt-1] == n) {
for (int i = 0; i < divcnt-1; i++) {
div[2*divcnt-i-2] = n/div[i];
}
divcnt = 2*divcnt-1;
} else {
for (int i = 0; i < divcnt; i++) {
div[2*divcnt-i-1] = n/div[i];
}
divcnt = 2*divcnt;
}
div[divcnt] = n;
divcnt++;
for (int i = 0; i < divcnt; i++) {
for (int j = 0; j < divcnt; j++) {
if (div[i]%div[j] != 0LL && div[j]%div[i] != 0LL) {
long long tmp = div[i]/gcd(div[i], div[j]);
tmp *= div[j];
if (tmp > div[i]) {
int idx[2] = { i+1, divcnt };
while (idx[1]-idx[0] > 1) {
int nxt = (idx[0]+idx[1])/2;
if (tmp < div[nxt]) {
idx[1] = nxt;
} else {
idx[0] = nxt;
}
}
e[i][idx[0]] += 1LL;
}
}
}
}
for (int i = 0; i < divcnt; i++) {
for (int j = i+1; j < divcnt; j++) {
if (e[i][j] > 0LL) {
ee[i][ecnt[i]] = j;
c[i][ecnt[i]] = e[i][j];
ecnt[i]++;
}
}
}
for (int i = 0; i < divcnt; i++) {
dp[i] = 1LL;
}
while (dp[divcnt-1] > 0LL) {
ans += dp[divcnt-1];
for (int i = divcnt-1; i >= 0; i--) {
if (dp[i] > 0LL) {
for (int j = 0; j < ecnt[i]; j++) {
dp[ee[i][j]] += dp[i]*c[i][j];
dp[ee[i][j]] %= mod_num;
}
}
dp[i] = 0LL;
}
}
printf("%lld\n", ans%mod_num);
return 0;
}
chro_96