地址:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827369770
思路:费马小定理,a^b%7,对于a可以a%7,因此a可化为只在 0-6之间,而对于b,根据费马小定理 a^6%7=1,因此 b可化为只在 0-5之间,因此对于所有的a^b就只有 7*6种情况,因此计算a^b所有情况的个数即可
Code:
#include<iostream>
using namespace std;
int n,T;
string s[7]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int d[7][6];
int Fun(int a,int b){
int x=1;
for(int i=0;i<b;++i)
x=x*a%7;
return x*(d[a][b]%7)%7;
}
int main()
{
ios::sync_with_stdio(false);
cin>>T;
while(T--){
cin>>n;
int res=0,t;
for(int i=1;i<=6;++i)
{
t=(n-i)/42;
for(int j=0;j<=5;++j)
d[i][j]+=t;
for(int j=t*42+i,b=i%6;j<=n;j+=7)
{
++d[i][b];
b=(b+1)%6;
}
}
for(int i=1;i<=6;++i)
for(int j=0;j<=5;++j)
{
res=(res+Fun(i,j))%7;
d[i][j]=0;
}
cout<<s[res]<<endl;
}
return 0;
}