LQ0067 星期计算快速模幂
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0067 星期计算快速模幂相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2022初赛 Java B组A题
题目描述
已知今天是星期六,请问20^22天后是星期几?
注意用数字1到7表示星期一到星期日。
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
问题分析
这个题用快速模幂计算才是正解。用迭代计算20^22也可以,慢。
用大数计算是大炮打苍蝇,没有必要。根据数论的余数定理来计算,小数计算即可。
AC的C语言程序(快速模幂)如下:
/* LQ0067 星期计算 */
#include <stdio.h>
// 快速模幂计算函数
int powermod(int a, int n, int mod)
int res = 1;
while(n)
if(n & 1) // n % 2 == 1
res *= a, res %= mod;
a *= a, a %= mod, n >>= 1;
return res;
int main()
int t = 6 + powermod(20, 22, 7);
if ((t %= 7) == 0) t = 7;
printf("%d\\n", t);
return 0;
AC的C语言程序(连乘)如下:
/* LQ0067 星期计算 */
#include <stdio.h>
int main()
int t = 1;
for (int i = 1; i <= 22; i++)
t *= 20, t %= 7;
t += 6;
if ((t %= 7) == 0) t = 7;
printf("%d\\n", t);
return 0;
以上是关于LQ0067 星期计算快速模幂的主要内容,如果未能解决你的问题,请参考以下文章
模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)