题目描述
毕竟是元宵节,晚上还是要吃几个元宵。 Etéreo 家可是个大家庭,元宵的数量,甚至是餐具的数量,都多的惊人。现在,爱数学的 Etéreo 又来问你有趣的数学题了,快来秒掉它! Etéreo 家里有 种元宵馅, 种元宵皮,每个元宵可以选择任意一种元宵馅和任意一种元宵皮。同时有 张桌子,每张桌子上放了 只碗,每只碗能放一只元宵。每只碗都要装一只元宵。Etéreo 会告诉你 的值,想请问你有多少种装元宵的方式。答案对 取模。
两种方式被认为是不同的当且仅当至少有一只碗存在于两种方式的同一个位置但是里面有至少一个元宵不同。
两个元宵被认为是不同的当且仅当元宵馅不同或者元宵皮不同。
碗和桌子都是有编号的,但是你不能改变碗或桌子的编号。
你可以认为碗和桌子都是固定的,你只能改变元宵的种类和位置。
输入描述:
输入共一行,五个整数 ,意义同题目描述。
输出描述:
每行一个整数,表示答案。
示例1
输入
1 2 1 3 998244353
输出
8
备注:
用快速幂取模方法以及位运算提高效率
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a,b,c,d,mod;
ll quick_mod(ll m,ll n)
{
//求m^n%mod
ll ret = 1;
while(n)
{
if(n & 1)//如果n为奇数
{
ret *= m;
ret %= mod;
}
m *= m;
m %= mod;
n >>= 1;//n除以2
}
return ret;
}
int main(void)
{
scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&mod);
a %= mod, b %= mod;
ll ans1 = quick_mod(a,c * d);
// printf("%lld\n",ans1);
ll ans2 = quick_mod(b,c * d);
// printf("%lld\n",ans2);
ll ans = (ans1 * ans2) % mod;
printf("%lld\n",ans);
}