zoukankan      html  css  js  c++  java
  • 快速幂

    题目链接:https://www.luogu.com.cn/problem/P1226(洛谷)

                     http://ybt.ssoier.cn:8088/problem_show.php?pid=1326(一本通)

    方法一:枚举

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int b, p, k;
     4 long long  ans=1;
     5 int main(){
     6     scanf("%d%d%d", &b, &p, &k);
     7     for(int i=1; i<=p; i++)
     8         ans=((ans%k)*(b%k))%k;
     9     printf("%d^%d mod %d=%lld", b, p, k, ans);
    10     return 0;
    11 }

    方法二:归并

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int b, p, k;
     4 long long  quickPower(int a, int b, int k)//是求a的b次方
     5 {
     6     if(b==0)return 1%k;
     7     if(b==1)return a%k;
     8     long long y=quickPower(a, b/2, k)%k;
     9     if(b%2==0)
    10         return (y*y)%k;
    11     else
    12         return ((y*y)%k*a)%k;
    13 }
    14 int main(){
    15     scanf("%d%d%d", &b, &p, &k);
    16     printf("%d^%d mod %d=%lld", b, p, k, quickPower(b, p, k));
    17     return 0;
    18 }

    方法三:位运算

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int b, p, k;
     4 long long quickPower(int a, int b)//是求a的b次方
     5 {
     6     long long ans = 1, base = a;//ans为答案,base为a^(2^n)
     7     while(b > 0)//b是一个变化的二进制数,如果还没有用完
     8     {
     9         if(b & 1)//&是位运算,b&1表示b在二进制下最后一位是不是1,如果是:
    10         {
    11             ans *= base;//把ans乘上对应的a^(2^n)
    12             ans %= k;
    13         }
    14         
    15         base *= base;//base自乘,由a^(2^n)变成a^(2^(n+1))
    16         base %= k;
    17         b >>= 1;//位运算,b右移一位,如101变成10(把最右边的1移掉了),10010变成1001。现在b在二进制下最后一位是刚刚的倒数第二位。结合上面b & 1食用更佳
    18     }
    19     return ans%k;
    20 }
    21 int main(){
    22     scanf("%d%d%d", &b, &p, &k);
    23     printf("%d^%d mod %d=%d", b, p, k, quickPower(b, p));
    24     return 0;
    25 }
  • 相关阅读:
    leetcode Remove Nth Node From End of List
    leetcode Plus One
    leetcode climbing stairs
    leetcode Merge Two Sorted Lists
    leetcode Maximum Subarray
    leetcode Binary Tree Level Order Traversal I II
    leetcode Pascal's Triangle II
    leetcode pascal's triangle
    leetcode valid parentheses
    leetcode Path Sum
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/14668311.html
Copyright © 2011-2022 走看看