zoukankan      html  css  js  c++  java
  • 16级第二周寒假作业H题

    快速幂(三)

    TimeLimit:2000MS  MemoryLimit:128MB
    64-bit integer IO format:%I64d
    Problem Description

    计算( AB)%C

     

    Input

    有多组数据
    每组数据有三个整数A,B,C 其中1<=A,B,C<2^63 因为有可能要用到unsigned long long(数值范围 0至2^64-1)

    这里提示一下:unsigned long long对应输入输出格式 :%I64u

    数据约2000组

    Output

    输出(AB)%C的结果

    SampleInput
    6 2 8
    9 3 7
    2 10 23
    3 7 57
    9223372036854775806 2 9223372036854775807
    

    SampleOutput
    4
    1
    12
    21
    1
    
    思路:首先做这一题你必须了解快速幂,快速幂我自认为讲的不详细,这里就借鉴了大牛们的一篇帖子,极其详细;http://blog.csdn.net/net_assassin/article/details/38640933
    但是你会发现快速幂的话有两个地方碰上大数会直接爆unsigned long long:ans = (ans * a) % c; a = (a * a) % c;就是这两个地方,此时我们发现一个特点,这不就是广义快速幂吗??
    同上,本人语言能力有限,广义快速幂还是要用大牛的文章来介绍:http://www.cnblogs.com/qswg/p/6336508.html
    然后有了这两个我们就可以很好的写出代码了。
    献上我low逼的代码:
    (unsigned long long对应输入输出格式 :%I64u)
    时间:1277MS   长度:275
    
    
    ll P(ll a, ll b, ll c)
    {
        ll r=0;
        a%=c;
        while(b>0)
        {
            if(b&1)
                r=(r+a%c)%c;
            a=(a%c+a%c)%c;
            b>>=1;
        }
        return r;
    }
    函数(广义快速幂)
    while(b>0)
            {
                if(b%2==1)
                A=P(A, a, c);//将原来是乘法的地方用广义快速幂来解决
                b=b/2;
                a=P(a, a, c);
            }
    快速幂
  • 相关阅读:
    hdu 1754 线段树 注意线段树节点的设计 求什么,设什么
    hdu 4015 概率题
    poj 1950 回溯
    最大上升子序列
    JVM学习博客
    2012
    i am alone at a crossroads
    易知难
    牢骚。。
    something
  • 原文地址:https://www.cnblogs.com/DCD112358/p/6357680.html
Copyright © 2011-2022 走看看