计算星期几

题目描述

假设今天是星期日,那么过 a a a b b b 次方天之后是星期几?

输入格式

两个正整数 a , b a, b a,b,中间用单个空格隔开。 1 ≤ a ≤ 100 1 \le a \le 100 1a100 1 ≤ b ≤ 10000 1 \le b \le 10000 1b10000

输出格式

一个字符串,代表过 a a a b b b 次方天之后是星期几。

其中,Monday 是星期一,Tuesday 是星期二,Wednesday 是星期三,Thursday 是星期四,Friday 是星期五,Saturday 是星期六,Sunday 是星期日。

样例 #1

样例输入 #1

3 2000

样例输出 #1

Tuesday

提示

对于 100 % 100 \% 100% 的数据, 1 ≤ a ≤ 100 1 \le a \le 100 1a100 1 ≤ b ≤ 10000 1 \le b \le 10000 1b10000

题目传送门

对于这道题,如果硬算 aba^bab 的话,最大可以达到 10010000100^{10000}10010000,显然是不可行的。

这时,我们可以利用余数的可乘性:

如果 a≡bmod  ca\equiv b\mod cabmodc,则 a×bmod  c=((amod  c)×(bmod  c))mod  ca \times b \mod c =((a \mod c)\times(b \mod c)) \mod ca×bmodc=((amodc)×(bmodc))modc

因此,xymod  7≡((xy−1mod  7)×(xmod  7))mod  7x^y \mod 7 \equiv ((x^{y-1} \mod 7)\times(x \mod 7)) \mod 7xymod7((xy1mod7)×(xmod7))mod7

(如果想要了解更多,可以看看这篇文章。)

综上,我们便不难写出代码:

#include<iostream>
using namespace std;
int a,b,ans=1;
int main(){
	cin>>a>>b;
	a%=7;
	for(int i=1;i<=b;i++){
		ans*=a;
		ans%=7;
	}
	if(ans==0)cout<<"Sunday";
	if(ans==1)cout<<"Monday";
	if(ans==2)cout<<"Tuesday";
	if(ans==3)cout<<"Wednesday";
	if(ans==4)cout<<"Thursday";
	if(ans==5)cout<<"Friday";
	if(ans==6)cout<<"Saturday";
	return 0;
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐