题目描述
假设今天是星期日,那么过 a 的 b 次方天之后是星期几?
输入格式
两个正整数 a,b,中间用单个空格隔开。1≤a≤100,1≤b≤10000。
输出格式
一个字符串,代表过 a 的 b 次方天之后是星期几。
其中,Monday
是星期一,Tuesday
是星期二,Wednesday
是星期三,Thursday
是星期四,Friday
是星期五,Saturday
是星期六,Sunday
是星期日。
输入输出样例
输入 #1
3 2000
输出 #1
Tuesday
说明/提示
对于 100% 的数据,1≤a≤100,1≤b≤10000。
思路
对于这道题,如果硬算 pow(a,b) 的话,最大可以达到 100的10000次方,显然是不可行的。
这时,我们可以利用余数的可乘性:
如果 a ≡ b mod c,则 a * b mod c = ( (a mod c) * (b mod c) ) mod c。
因此,x * y mod 7≡((x * y − 1 mod 7) * (x mod 7)) mod 7。
AC Code
我相信没有人会看前面的题目和分析,那么你们最喜欢的代码来了!
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b;
cin>>a>>b;
long long c=1;
a%=7;
for(int i=0;i<b;i++){
c*=a;
c=c%7;
}
switch(c){
case 1:cout<<"Monday";break;
case 2:cout<<"Tuesday";break;
case 3:cout<<"Wednesday";break;
case 4:cout<<"Thursday";break;
case 5:cout<<"Friday";break;
case 6:cout<<"Saturday";break;
case 0:cout<<"Sunday";break;
}
return 0;
}