题解:P13928 [蓝桥杯 2022 省 Java B] 星期计算
两种方法,一种是暴力,另一种是数学。
暴力
只需要循环相乘,每乘一次就模一次
也可以使用快速幂,但其实不用那么复杂。
C++代码
#include<bits/stdc++.h>
using namespace std;
//template<typename T>
//T ksm(T a,T b,T mod){
// int res=1;
// for(a%=mod;b;b>>=1,a*=a%mod)
// if(b&1) res=res*a%mod;
// return res;
//}
//int main(){
// int res=ksm(20,22,7);
// cout<<res;
// return 0;
//}快速幂算法
int main(){
int res=1;
for(int i=0;i<22;i++) res=res*20%7;
cout<<res;
return 0;
}
Java代码
public class Main {
public static void main(String[] args) {
int res = 1;
for (int i = 0; i < 22; i++) {
res = res * 20 % 7;
}
System.out.println(res);
}
}
数学
可以将问题简化为
-
-
-
- 所以
20^{22} \equiv 1 \pmod{7} 注:
由于题目说是从星期六开始的,所以答案还要加上
6 ,因此最后的答案应是7 。