zoukankan      html  css  js  c++  java
  • 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘

    链接:https://ac.nowcoder.com/acm/contest/392/B
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。
    月月的其中一项作业是:给定正整数A、B、P,求ABmodPABmodP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。
    因为月月的作业很多,所以有T组询问。

    输入描述:

    第一行一个正整数T表示测试数据组数。
    接下来T行,每行三个正整数A、B、P,含义如上文。

    输出描述:

    输出T行,每行一个非负整数表示答案。
    示例1

    输入

    复制
    2
    2 5 10
    57284938291657 827493857294857 384729583748273

    输出

    复制
    2
    18924650048745

    备注:

    1T1031≤T≤103,1A,B,P1018

    水一波博客。

    题意很好理解,

    因为数据范围比较大,超了ll,所以用快速幂+快速乘。

    就是在快速幂的基础上,将快速幂中的乘法拆成加法求余,类似快速幂的快速乘。

    代码:

     1 //B
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 typedef long long ll;
     5 const int maxn=1e5+10;
     6 
     7 ll mul(ll a,ll b,ll p)
     8 {
     9     ll ans=0;
    10     while(b)
    11     {
    12         if(b&1) ans=(ans+a)%p;
    13         a=(a+a)%p;
    14         b=b>>1;
    15     }
    16     return ans;
    17 }
    18 
    19 ll Pow(ll a,ll b,ll p)
    20 {
    21     ll result=1;
    22     ll base=a%p;
    23     while(b){
    24         if(b&1) result=mul(result,base,p)%p;
    25         base=mul(base,base,p)%p;
    26         b=b>>1;
    27     }
    28     return result;
    29 }
    30 
    31 int main()
    32 {
    33     int t;
    34     cin>>t;
    35     while(t--){
    36         ll a,b,mod;
    37         cin>>a>>b>>mod;
    38         cout<<Pow(a,b,mod)<<endl;
    39     }
    40 }

    。。。

  • 相关阅读:
    c++错误崩溃3
    c++崩溃错误2
    c++多线程崩溃错误1
    MySQL UNSIGNED
    2PC和3PC
    proxy-target-class="false"与proxy-target-class="true"区别
    Spring MVC processing flow
    Spring中自动装配的模式
    Spring中BeanFactory和ApplicationContext的区别
    什么是Spring
  • 原文地址:https://www.cnblogs.com/ZERO-/p/10679564.html
Copyright © 2011-2022 走看看