题意:
今天星期六,求1^1+2^2……N^N天后是星期几
思路:
同余与模算术,利用快速幂取模的算法,时间复杂度为O(logn)。
1.先用快速幂求出11 , 22 +,33 , ......,NN
对7取模之后的结果,发现循环节长度为42,即
(1^1)%7=(43^43)%7,
(2^2)%7=(44^44)%7,
(3^3)%7=(45^45)%7,
(n^n)%7=( (42...,
1,2,5,1,5,1,0,
1,4,1,4,4,6,0,
1,1,3,2,6,1,0,
1,2,2,1,2,6,0,
2.然后打表求出[1,42]区间每个数n的(n^n)%7,再求a数组的前缀和b...数组,
sum表示一个循环节所贡献的天数,即sum=(1^1+2^2+3^3+......+41^41+41^42)%7=6;
对于每一个样例n,直接计算即可
AC代码:C++
#include<bits...("%s\n", s[ans]);
}
return 0;
}
另一种计算sum的方法:
#include
using namespace std;