进制下的快速幂运算与取模
题目描述
在狂狼村,有计算模运算的需求,且涉及不同进制。胖头鱼提到的《快速幂运算》技巧可用于解决此问题。
- 幂运算定义:n个a相乘的运算称为幂运算,记作an,a被称为底数。幂运算具有性质am×an=am+n,当n=m时有am×an=a2m,可据此快速计算一些幂的值。例如,计算an(n较大时),可将n分解为多个上述幂的乘积,从而快速算出。如计算515(十进制下),52=25,54=(52)2=625,58=(54)2=390625,$5^{15} = 5^8 \times 5^4 \times 5^2 \times 5^1 = 390625 \times 625 \times 25 \times 5$(十进制计算)。
- 本题任务:不同物种使用不同进制进行运算,需根据给定的进制k,计算an模m的结果,答案也用k进制表示。a本身始终用十进制表示,题面中未特别注明时,其他数也用十进制表示,但计算过程需考虑进制转换。
输入格式
- 第一行包含一个整数k(2≤k≤10),表示之后输入与输出的进制,用十进制表示。
- 第二行包含两个整数a和m(1≤a,m,a,m的位数不超过1000),分别表示底数和模数,用k进制表示。
- 第三行包含一个整数n(n为非负整数且位数不超过100000),表示幂的次数,用k进制表示。
输出格式
输出一个整数,表示an模m后的结果,用k进制表示。
样例
样例输入1
10
5 9999
15
样例输出1
188
样例解释1
515(十进制)%9999(十进制)=30517578125(十进制)%9999(十进制)=188(十进制),答案以十进制形式给出,因为输入的进制k=10。
样例输入2
2
1001 1111111111111111
110
样例输出2
1101111111001
样例解释2
运算中的数用二进制表示。a=1001(二进制)=9(十进制),m=1111111111111111(二进制)=65535(十进制),n=110(二进制)=6(十进制)。96(十进制)%65535(十进制)=531441(十进制)%65535(十进制)=7176(十进制)=1101111111001(二进制),答案以二进制形式给出,因为输入的进制k=2。
数据范围与提示
- 对于所有测试点,2≤k≤10、1≤a,m、n为非负整数且位数不超过100000。
- 部分测试点特殊属性:
- 测试点1−6:k=10、1≤a,m≤10000、n<1000,表示所有数均以十进制形式给出,且都比较小。
- 测试点7−12:k=2,表示a、m、n都是二进制数,输出同理。
- 测试点13−16:n的位数不超过1000。