B2074 计算星期几 题解
计算星期几
题目描述
假设今天是星期日,那么过 a a a 的 b b b 次方天之后是星期几?
输入格式
两个正整数 a , b a, b a,b,中间用单个空格隔开。 1 ≤ a ≤ 100 1 \le a \le 100 1≤a≤100, 1 ≤ b ≤ 10000 1 \le b \le 10000 1≤b≤10000。
输出格式
一个字符串,代表过 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 1≤a≤100, 1 ≤ b ≤ 10000 1 \le b \le 10000 1≤b≤10000。
对于这道题,如果硬算 aba^bab 的话,最大可以达到 10010000100^{10000}10010000,显然是不可行的。
这时,我们可以利用余数的可乘性:
如果 a≡bmod ca\equiv b\mod ca≡bmodc,则 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≡((xy−1mod7)×(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;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)