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 星期计算快速模幂的主要内容,如果未能解决你的问题,请参考以下文章

LQ0042 星期一日期计算

模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)

模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)

LQ0202 世纪末的星期日期计算

快速模幂

LQ0065 k倍区间前缀和+余数定理