【问题描述】
题目很简单:请你计算(a^1+a^2+…+a^n) mod 1234567 的结果,其中(0 < a,n < 2^31 )。
【输入格式】
第一行T,表示数据组数,接下来的T行,每行包含a和n,表示一组数据。
【输出格式】
对于每组数据,输出对应的答案。
【输入样例】
5
1 7
3 10
5 8
9 20
17 100
【输出样例】
7
88572
488280
696766
550479
【数据范围】
0< T <=1000
【分析】
首先不难想到直接用二分快速幂求解,算出每个幂的值后相加。
时间复杂度分析:O(T*log2(n!))在本题n < 2^31,T <=1000不能通过全部数据。
其次能想到等比数列运用公式直接求解,但本题数据规模较大,且运用除法不能取模,所以得想想其他的方法— —
由a^1+a^2+…+a^n,如果将这个式子二分,得到(a^1+a^2+…+a^(n/2))*(1+a^(n/2));则本题就迎刃而解了,运用分治不断递归求解即可。
参考: