• 快速幂||取余运算


    题目描述

    给你三个整数 b,p,k,求 (b^p) mod k。

    输入格式

    输入只有一行三个整数,分别代表 b,p,k。

    输出格式

    输出一行一个字符串 b^p mod k=s,其中b,p,k分别为题目给定的值,s为运算结果。

    数据规模与约定

    对于100%的数据,保证0 (leq) b,p (leq) (2^{31}),1 (leq) k (leq) (2^{31})

    思路

    快速幂的模板题,没有什么好说的。有两个细节需要注意:
    1)a%2==1与a&1==1是等价的。
    2)取模的运算不会干涉乘法运算。
    3)根据费马小定理,如果k是一个质数,我们可以计算(b^{p mod(k-1)})来加速算法过程。
    代码如下:

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    typedef long long int ll;
    long long binpow(long long a, long long b, long long m) {
      a %= m;
      long long res = 1;
      while (b > 0) {
        if (b & 1) res = res * a % m;
        a = a * a % m;
        b >>= 1;
      }
      return res;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll b,p,k;
        cin>>b>>p>>k;
        cout<<b<<"^"<<p<<" mod "<<k<<"="<<binpow(b%k,p,k)%k<<endl;
        return 0;
    }
    

    参考资料

    1)https://oi-wiki.org/math/quick-pow/

  • 相关阅读:
    算法
    ximalaya-spider
    无名小站
    python send email
    spider-bilibili
    windows镜像
    python 爬取豆瓣电影写入到excel中
    pdf 转 word
    文档分割、合并
    文档合并
  • 原文地址:https://www.cnblogs.com/Acapplella/p/13470758.html
Copyright © 2020-2023  润新知