zoukankan      html  css  js  c++  java
  • 求乘方取模(快速幂+慢速乘法模板)

    求乘方取模

    题目描述:
    给定非负整数A、B、M,求(A ^ B) mod M。
    输入描述 Input Description
    包含多组输入,输入处理到EOF。
    每组输入仅一行,三个用空格隔开的非负整数A、B、M。
    输出描述:
    对于每组输入,输出一行,一个非负整数,即(A ^ B) mod M。
    样例输入:
    2 3 100006
    32 71 83
    900 800 777
    样例输出:
    8
    5
    219
    数据范围及提示:
    0 <= A, B < 8 * 10^18。
    0 < M < 8 * 10^18。
    保证A和B不同时为0。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    unsigned long long a,b,m;
    unsigned long long quick_mul(unsigned long long a,unsigned long long b,unsigned long long mod)//慢速乘法模板
    {
        unsigned long long ans=0;
        while(b)
        {
            if(b&1)
            {
                b--;
                ans=(ans+a)%mod;
            }
            b>>=1;
            a=(a+a)%mod;
        }
        return ans;
    }
    unsigned long long quick_mi(unsigned long long a,unsigned long long b,unsigned long long mod)//快速幂模板
    {
        unsigned long long ans=1;
        while(b)
        {
            if(b&1)
            ans=quick_mul(ans,a,mod);
            b>>=1;
            a=quick_mul(a,a,mod);
        }
        return ans;
    }
    int main()
    {
        while(cin>>a>>b>>m)//a^b%m
        cout<<quick_mi(a,b,m)<<endl;
        return 0;
    }
  • 相关阅读:
    redis常用数据类型与命令
    bcb6重启应用程序
    MySQL 关联查询  外连接 { LEFT| RIGHT } JOIN
    MySQL 关联查询 内连接
    MySql子查询
    MySql单表查询
    表级操作语句
    库级操作语句
    14.正则表达式、re模块、元字符
    13.生成器、迭代器、 模块、包和包管理
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070977.html
Copyright © 2011-2022 走看看