社区讨论
RE #7 #8 #9 #10 60分求调
P3861拆分参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m00r7tv2
- 此快照首次捕获于
- 2024/08/19 16:48 2 年前
- 此快照最后确认于
- 2025/11/04 23:03 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
const int p = 998244353, N = 10005, M = 1000005;
long long n;
long long fac[M], cnt;
long long dp[N][N];
long long pos1[M], pos2[M];
int main() {
int T;
cin >> T;
while(T --) {
cin >> n;
cnt = 0;
for(long long i = 1; i * i <= n; i ++) {
if(n % i == 0) {
fac[++ cnt] = i;
if(i * i != n) fac[++ cnt] = n / i;
}
}
sort(fac + 1, fac + cnt + 1);
for(int i = 1; 2 * i <= cnt + 1; i ++) {
pos1[fac[i]] = i;
pos2[fac[i]] = cnt - i + 1;
}
for(int i = 1; i <= cnt; i ++) {
if(i == 1) dp[i][1] = 1;
else dp[i][1] = 0;
for(int j = 2; j <= cnt; j ++) {
dp[i][j] = dp[i][j - 1];
if(j > i) continue;
if(fac[i] % fac[j] == 0) {
int tmp = fac[i] / fac[j];
int pos = (tmp <= (int)sqrt(n) ? pos1[tmp] : pos2[n / tmp]);
(dp[i][j] += dp[pos][j - 1]) %= p;
}
}
}
cout << dp[cnt][cnt] - 1 << endl;
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...