题意:开始是星期六,给出一个n,求11 + 22 + 33 + … + nn天之后是星期几。
题记:打表找循环节,要找到第294个数。也可以用数学方式推导出公式。
#include<iostream>
using namespace std;
typedef long long ll;
char str[10][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
ll fastpow(int a,int n){
ll res=1,pow=a;
while(n){
if(n&1)
res=res*pow%7;
pow*=pow%7;
n/=2;
}
return res;
}
int main(){
int T;
cin>>T;
while(T--){
ll n;
cin>>n;
n%=294;
ll ans=0;
for(int i=1;i<=n;i++){
ans+=fastpow(i,i)%7;
ans%=7;
//cout<<ans<<' ';
}
cout<<str[ans]<<endl;
}
return 0;
}