专栏文章

题解:P13928 [蓝桥杯 2022 省 Java B] 星期计算

P13928题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio17nih
此快照首次捕获于
2025/12/02 11:41
3 个月前
此快照最后确认于
2025/12/02 11:41
3 个月前
查看原文
两种方法,一种是暴力,另一种是数学。

暴力

只需要循环相乘,每乘一次就模一次 77 就可以了。
也可以使用快速幂,但其实不用那么复杂。

C++代码

CPP
#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代码

CPP
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);
    }
}

数学

可以将问题简化为 2022mod720^{22} \mod 7 等于几。
  • 20÷7=220 \div 7=266,所以 206(mod7)20 \equiv 6 \pmod{7}
  • 61(mod7)6 \equiv -1 \pmod{7}
  • (1)22=1(-1)^{22}=1
  • 所以 20221(mod7)20^{22} \equiv 1 \pmod{7}

注:

由于题目说是从星期六开始的,所以答案还要加上 66,因此最后的答案应是 77

评论

0 条评论,欢迎与作者交流。

正在加载评论...