题解 | #X-factor Chains#

X-factor Chains

https://ac.nowcoder.com/acm/contest/21094/E

【X-factor Chains】

题目需要让序列aa​​尽可能的长,且aiai+1a_i|a_{i+1},即ai×t=ai+1a_i\times t = a_{i+1}只要让tt尽可能小就行了,也就是tt是一个质数。

xx​分解质因数得x=p1α1p2α2...pkαkx=p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}​,即ai+1=ai×pja_{i+1}=a_i\times p_j​,只需要将质因数pjp_j​​排列组合就行了。

可以注意到质因数的全排列是一个多重组合数S=(αi)!(αi!)S=\frac{(\sum \alpha_i)!}{\prod (\alpha_i!)}

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 3e4 + 10;

int T, fac[N];
int x, total, sum, res;

void init() {
    fac[0] = 1;
    for (int i = 1; i <= 100; i++) fac[i] = fac[i - 1] * i;
}

signed main() {
    init();
    cin >> T;
    while (T--) {
        cin >> x;
        sum = total = 0;
        int tmp = x;
        int w = 1;
        for (int i = 2; i * i <= x; i++) {
            int cnt = 0;
            while (tmp % i == 0) {
                tmp /= i;
                cnt++;
            }
            if (cnt) {
                sum += cnt;
                w *= fac[cnt];
            }
        }
        if (tmp > 1) sum++;
        res = fac[sum] / w;

        cout << sum << " " << res << endl;
    }

    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务