zoukankan      html  css  js  c++  java
  • P1226 【模板】快速幂||取余运算

    P1226 【模板】快速幂||取余运算

    通过一个模板题简单总结一下快速幂

    题目描述

    给你三个整数 b,p,k,求b的p次方mod k的值

    输入格式

    输入只有一行三个整数,分别代表 b,p,k

    输出格式

    输出一行一个字符串 b^p mod k=s,其中 b, p, kb,p,k 分别为题目给定的值, ss 为运算结果。

    输入输出样例

    输入 #1复制

    2 10 9
    

    输出 #1复制

    2^10 mod 9=7
    

    【算法思路】

    对于一个数的n次幂,我们可以将它进行拆解,在这里以2^15为例:

    step1.答案等于 15 个 2 相乘.
    step2.答案等于 7 个 4 相乘再乘上一个 2.
    step3.答案等于 3 个 16 相乘再乘上 2*4.
    step4.答案等于 1 个 256 乘上 2*4*16.
    

    从以上的步骤中不难看出,当我们求一个数的n次幂的时候,我们可以将它的两两进行配对相乘,如果有多出来的一个数,则将它乘到答案中,否则继续配对,直到只剩下一个数为止。有一个小的注意事项,对答案进行初始化时,初始值应为1而不是0.

    【注意事项】

    1、每进行一步运算时都要把得到的答案对p取模,否则会只有28分。

    2、b m p ans 都要定义成 long long 型变量,不然会只有42分。

    3、不要认为运算过程中对答案取模就够了,再输出答案的时候不要忘记把最终的答案再对p取一次模,否则就会只有84分。

    4、结合以上几点注意事项的快速幂程序就可以得到100分了。

    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        long long ans=1,i,j,k,m,n,b,p;
        scanf("%lld%lld%lld",&b,&m,&p);
        printf("%lld^%lld mod %lld=",b,m,p);
        while(m>0){
            if(m%2==1)
                ans=ans*b%p;
            b=b*b%p;
            m=m>>1;
        }
        printf("%lld",ans%p);
        return 0;
    }
    
  • 相关阅读:
    Android学习—Shape
    Android学习—Application的作用
    用户管理
    DPKG命令与软件安装、APT
    Linux学习笔记
    C如何使用内存
    九九乘法表.py
    超市买苹果.py
    第一个程序python.py
    JavaScript一些备忘知识
  • 原文地址:https://www.cnblogs.com/Kyriech-Francis/p/Answer_P1226.html
Copyright © 2011-2022 走看看