zoukankan      html  css  js  c++  java
  • AcWing 875. 快速幂

    题目链接:https://www.acwing.com/problem/content/description/877/


    快速幂模板题,计算amod p 的值,a,b,p大概1e9左右,可以快速计算出结果

    例如:11的二进制是1011,所以 11 = 23 * 1 + 22 * 0 + 21 * 1 + 20 * 1 = 20 + 21 + 23,当我们求 a11 的时候 a11 = a2^0 + 2^1 + 2^3 = a2^0 + a2^1 + a2^3,所以当我们计算任何ab 时,只要预处理出来 a2^0 ~ a2^logb 即可快速计算出结果

    时间复杂度:O(logb)

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 typedef long long ll;
     6 int a, b, p, n;
     7 
     8 ll qmi()
     9 {
    10     ll s = 1 % p;
    11     while (b)
    12     {
    13         if (b & 1)  s = (ll)s * a % p;
    14         a = (ll)a * a % p;
    15         b >>= 1;
    16     }
    17     return s;
    18 }
    19 
    20 int main()
    21 {
    22     scanf("%d",&n);
    23     while (n -- )
    24     {
    25         scanf("%d%d%d",&a,&b,&p);
    26         ll ans = qmi();
    27         printf("%lld
    ",ans);
    28     }
    29     return 0;
    30 }
    View Code

    PS:对于代码中的第10行,写出 s = 1 % p,不写成 s = 1,是因为当p为1时结果不同(虽然p为1时不用计算,但是严谨许多)

  • 相关阅读:
    js笔记4
    js笔记3
    js笔记2
    js笔记1
    前端笔记13
    (7)第3章的开始
    (6)第2章的尾巴~
    (5)自定义数据结构再探
    我的学习方法(6)
    (4)自定义数据结构初探
  • 原文地址:https://www.cnblogs.com/chuyds/p/12009510.html
Copyright © 2011-2022 走看看