zoukankan      html  css  js  c++  java
  • 51Nod-1046 A^B Mod C (快速幂,了解快速幂及对 A^B Mod C的求解)

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     收藏
     关注
    给出3个正整数A B C,求A^B Mod C。
     
    例如,3 5 8,3^5 Mod 8 = 3。
    Input
    3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9)
    Output
    输出计算结果
    Input示例
    3 5 8
    Output示例
    3

    下面是a^b快速幂的函数。
     1 int poww(int a,int b){
     2     int ans=1,base=a;
     3     while(b!=0){
     4         if(b&1!=0)
     5           ans*=base;
     6         base*=base;
     7         b>>=1;
     8   }
     9     return ans;
    10 }

    下面是关于A^B Mod C的类型。

    1:A=A*A的地方要取模

    2:还有结果的地方都要取模

     1 #include<stdio.h>
     2 long long poww(long long a,long long b,long long c)
     3 {
     4     long long ans=1,base=a;
     5     while (b!=0)
     6     {
     7         if(b&1!=0)
     8         {
     9             ans*=base;
    10             ans=ans%c;//这里取模←←←←←←←←←←←←
    11         }
    12         base*=base;
    13         base=base%c;//这里取模←←←←←←←←←←←←
    14         b>>=1;
    15     }
    16     return ans%c;//这里取模←←←←←←←←←←←←
    17 }
    18 int main()
    19 {
    20     long long A,B,C;
    21     scanf("%lld%lld%lld",&A,&B,&C);
    22     if(B%2==0)
    23     {
    24         A=(A*A)%C;//这里取模←←←←←←←←←←←←
    25         printf("%lld
    ",poww(A,B/2,C)%C);
    26     }
    27     else
    28     {
    29         long long Q=A;
    30         A=(A*A)%C;//这里取模←←←←←←←←←←←←
    31         printf("%lld
    ",(poww(A,B/2,C)*Q)%C);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    单例 与 static
    ActiveMQ 核心概念
    Jconsole
    死锁
    document write & close
    java.nio.Buffer
    Java 线程控制(输出奇偶数)
    exist & in
    命运
    Super Jumping! Jumping! Jumping!
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/9305874.html
Copyright © 2011-2022 走看看