B2074 计算星期几 题解

· · 题解

题目传送门

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

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

如果 a\equiv b\mod c,则 a \times b \mod c =((a \mod c)\times(b \mod c)) \mod c

因此,x^y \mod 7 \equiv ((x^{y-1} \mod 7)\times(x \mod 7)) \mod 7

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

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

#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;
}