我表示我完全是看题解莫名其妙对了,题目和代码暂存在这里。
如有大牛路过,欢迎留评论
【a^b≡a^(b mod phi(c)+phi(c)) (mod c)(b>=phi(c))】【公式的条件很苛刻,原以为(b>=phi(c))没有意义】
其中phi(c) 是欧拉函数
原题目:
一、超级数
【题目描述】:
众所周知,多次加法运算是乘法,多次乘法运算是乘方,那么多次乘方运算呢?比如:
2^2=4
2^2^2=16
2^2^2^2=65536
现在我需要你的力量来计算出:
a1^a2^a3^a4^a5^...an mod p
但是,这个数光是想想就远远超过了整个宇宙的大小,所以你只要求出它的值MOD P就可以了
【输入】:
第一行两个数N,P,如题目描述。
第二行N个数,表示a1~n。
【输出】:
仅一个数,表示它的值mod p的结果。
【样例输入】:
5 13
2 2 2 2 2
【样例输出】:
3
【说明】:
20%的数据N≤3,ai<1000;
40%的数据ai,p为质数或1;
100%的数据N≤20,ai,p≤Maxlongint。
原题解: 挖掘乘法运算在取摸下的置换规律
(a^b^c^...) mod mo >>> [a^( (b^c^...) mod phi( mo / gcd(mo,a^x) ) ) ] mod mo
{x 只要稍微大一点就可以了,梁盾取的是43,学号==}
既可以递归为子问题。
另外有几个特殊情况,具体见标程。
fgm中+i是个细节
对于求phi,