快速幂(二)

TimeLimit:1000MS  MemoryLimit:128MB
64-bit integer IO format:%lld
未提交 | 登录后收藏 | 已有5人收藏了本题
Problem Description

已知数列 a1,a2……an和C

计算 (a1*a2*……*an)%C的结果

这里提一下广义幂的概念

设:○为一种运算且与集合V构成群,a∈V,e为○运算的幺元。

即e满足对于任意的a,有 e○a=a○e=a

我们可以记

a0=e

an=an-1○a

则有以下性质

an+m=an○am

则此时计算a关于○运算的n次幂的快速幂可以这样写

res=e;temp=a;

while(n)

{

        if(n&1)

                res=res○temp;

        temp=temp○temp;

        n>>=1;

}

return res;

然后就像a^b=a*a*a*a*a… 是关于乘法的幂运算,又因为1*a=a*1=a,所以乘法幺元e就是1,带入上面的程序就可以得到最常见的乘法快速幂

同理,a*b=a+a+a+a……,其实就是关于加法的幂运算,至于加法的幺元,自己找。找不到就不要来见我

Input

有多组测试数据

每组数据第一行是两个整数 n,C

接下来一行有n个整数,代表a1,a2,……,an;

其中

2<=n<=100

1<ai,C<2^60

数据约200组

Output

输出对应的计算结果,每个结果占一行

SampleInput
2 123456789987654321
123456789123456789 987654321123456789
SampleOutput
54869682945130317
Submit
题目统计信息详细
总AC数279
通过人数169
尝试人数176
总提交量442
AC率38.24%
AC该题后可以添加标签
贴完标签可以获得20ACB。
并且可以获得本题所有提交代码查看权限。
点击标题可以显示标签。
如果你还没认真思考过这题,请不要查看标签
如果您已经通过了该题,请务为该题贴上标签

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: