分元宵

题目描述

毕竟是元宵节,晚上还是要吃几个元宵。 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);
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值