zoukankan      html  css  js  c++  java
  • 题解 P1226 【【模板】快速幂||取余运算】

    • 1.题目分析

    原题

    本题在于快速幂的使用,以及对long long的应用问题。

    • 2.解题思路
    1. 快速幂

    求幂常见用法:

    int pow(int a,int b) {
        int ans;
        for(int i = 1;i<=b;++i) {
            ans*=a;
        }
        return ans;
    }

    原理十分简单,将a乘b次。 时间复杂度: O(n)

    但快速幂比它更快:

    while(m>0){
            if(m%2==1)
                ans=ans*b%p;
            b=b*b%p;
            m=m>>1;
    }

    (以上是算法示例) 时间复杂度: O(log n)

    所以,代码就出来了:

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    int main() {
        long long ans = 1, i, j, k, m, n, b, p;
        scanf_s("%lld%lld%lld", &b, &m, &p);
        printf("%lld^%lld mod %lld=", b, m, p);
        while (m > 0) {
            if (m % 2 == 1)
                ans = ans * b % p;
            b = b * b % p;
            m = m >> 1;
        }
        printf("%lld", ans % p);
        return 0;
    }
    Copyright littlefrog(2019) 所有权利保留。
  • 相关阅读:
    ASIX配置vlan tag能被wireshark获取
    翻译-cmake教程
    Manjaro打造开发环境
    Frida入门
    安卓应用启动底层执行逻辑
    集合框架
    oracle清除日志内存
    flutter widgets目录
    给设备添加udid
    5.class
  • 原文地址:https://www.cnblogs.com/littlefrog/p/11939517.html
Copyright © 2011-2022 走看看