zoukankan      html  css  js  c++  java
  • 自用笔记-快速幂

    快速幂代码:

    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<ctime>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    
    int a, b, pt = 1e3; //根据实际需求设置pt
    int res;
    LL Pow(int x, int y){
        LL ans = 1;
        while(y != 0){
            if(y & 1){
            ans *= x % pt;    //取余防止数据过大
            }
            y >>= 1;
            x *= x % pt;
        }
        return ans;
    }
    int main()
    {
        scanf("%d%d", &a, &b);
        res = Pow(a, b);
        printf("%d
    ", res);
        return 0;
    }

    关于取余的一些补充:

    有这样一个公式:  a% c = (a % c)b % c

    ------------------------------------------------------------------------------------------------------------------------------

    引理:  (ab)b % c = [(a % c) * (b % c)] % c

    证明  a % c = d => a = tc + d

        b % c = e => b = kc + e

        (ab) % c = (tc + d)(kc + e) % c

            = (tkc2 + (te + dk) + de) % c

            = de % c = [(a % c) * (b % c)] % c

    即   积的取余等于取余的积的取余

    由此可推广到  a% c = (a % c)b % c 也成立

  • 相关阅读:
    Trie树-字典树
    【实用向】一些简单实现
    C++ 基础部分
    【动态规划】背包问题-例题分析
    C语言-回溯例4
    C语言-回溯例3
    C语言-回溯例2
    C语言-回溯例1
    java开始到熟悉105-107
    C语言-二维背包问题
  • 原文地址:https://www.cnblogs.com/Lightfall/p/7895063.html
Copyright © 2011-2022 走看看