NC233873. 文艺计算姬
描述
输入描述
仅一行三个整数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'; }