列表

详情


NC233873. 文艺计算姬

描述

"奋战三星期,造台计算机"。小W响应号召,花了三星期造了台文艺计算姬。文艺计算姬比普通计算机有更多的艺
术细胞。普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一个带标号完全二分图的生成树
个数。更具体地,给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图K_{n,m},计算姬能快
速算出其生成树个数。小W不知道计算姬算的对不对,你能帮助他吗?

输入描述

仅一行三个整数n,m,p,表示给出的完全二分图K_{n,m}
1 <= n,m,p <= 10^18

输出描述

仅一行一个整数,表示完全二分图K_{n,m}的生成树个数,答案需要模p。

示例1

输入:

2 3 7

输出:

5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 464K, 提交时间: 2022-08-21 09:23:54

#include<bits/stdc++.h>
using namespace std ;
#define ll long long
ll n,m,mod ;
ll mul(ll a,ll b,ll mod) {
    a=(a%mod+mod)%mod ; b=(b%mod+mod)%mod ;
    ll tmp=a*b-(ll)((long double)a/mod*b+1e-9)*mod ;
    return tmp<0?tmp+mod:tmp ;
}
ll qsm(ll a,ll b)
{
    ll ans=1 ;
    while(b)
    {
        if(b&1) ans=mul(ans,a,mod) ;
        a=mul(a,a,mod) ; b>>=1 ;
    }
    return ans ;
}
int main()
{
    cin>>n>>m>>mod ;
    cout<<mul(qsm(n,m-1),qsm(m,n-1),mod)<<'\n' ;
    return 0 ;
}

C++ 解法, 执行用时: 5ms, 内存消耗: 420K, 提交时间: 2022-03-15 15:21:56

#include<iostream>
using namespace std;
typedef long long LL;

LL qpow(LL a, LL b, LL mod){
    LL res = 1;
    while(b){
        if (b & 1) res = (__int128)res * a % mod;
        b >>= 1;
        a = (__int128)a * a % mod;
    }
    return res;
}

int main(){
    LL n, m, p;
    cin >> n >> m >> p;
    cout << (LL)(((__int128)qpow(n, m - 1, p) * qpow(m, n - 1, p)) % p) << '\n';
}

上一题