WA0pts求调,
查看原帖
WA0pts求调,
352866
RoyWu1207楼主2023/12/23 10:46
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int mod = 1e7 + 7;

int n, f[49], ans = 1, C[49][49];

int qpow(int a, int exp) {
    int res = 1;
    while (exp) {
        if (exp & 1)    
            res = res * a % mod;
        a = a * a % mod, exp >>= 1;
    } return res;
}

void solve(int n, int add) {
    if (n == 0)
        return;
    int mxlg = log2(n + 1);
    for (int i = 1; i <= mxlg; i++)
        f[i + add] += C[i][mxlg];
    solve(n - (1ll << mxlg) + 1, add + 1);
}

signed main() {
    cin >> n; 
    for (int i = 0; i <= 48; i++)
        for (int j = i; j <= 48; j++)
            if (i == 0 || i == j)
                C[i][j] = 1;
            else        
                C[i][j] = (C[i][j - 1] + C[i - 1][j - 1]) % mod;
    solve(n, 0);
    for (int i = 1; i <= 48; i++)
        if (f[i])
            ans = ans * qpow(i, f[i]) % mod;
        else
            break;
    cout << ans;
    return 0;
}
2023/12/23 10:46
加载中...