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


    题目链接

    题目描述

    输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。

    输入输出格式

    输入格式:

    三个整数b,p,k.

    输出格式:

    输出“b^p mod k=s”

    s为运算结果

    输入输出样例

    输入样例#1: 复制

    2 10 9
    

    输出样例#1: 复制

    2^10 mod 9=7

    非递归型:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string>
     4 #include<iomanip>
     5 #include<vector>
     6 #include<cmath>
     7 #include<stack>
     8 using namespace std;
     9 typedef long long ll;
    10 ll mod_pow(ll x,ll n,ll mod)//非递归型快速幂取模 
    11 {
    12     ll res=1;
    13     while(n>0)
    14     {
    15         if(n&1) res=res*x%mod;
    16         x=x*x%mod;
    17         n>>=1;
    18     }
    19     return res;
    20 }
    21 int main()
    22 {
    23     ll b,p,k;
    24     cin>>b>>p>>k;
    25     cout<<b<<'^'<<p<<" mod "<<k<<'='<<mod_pow(b,p,k)%k;//最后模个k是为了避免k=1的情况
    26 }
    27  
    View Code

    递归型:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string>
     4 #include<iomanip>
     5 #include<vector>
     6 #include<cmath>
     7 #include<stack>
     8 using namespace std;
     9 typedef long long ll;
    10 ll mod_pow(ll x,ll n,ll mod)//递归型快速幂取模 
    11 {
    12     if(!n) return 1;
    13     if(n==1) return x%mod;
    14     
    15     ll ans=mod_pow(x,n/2,mod);
    16     ans=ans*ans%mod;
    17     if(n&1) ans=ans*x%mod;
    18     return ans; 
    19 }
    20 int main()
    21 {
    22     ll b,p,k;
    23     cin>>b>>p>>k;
    24     cout<<b<<'^'<<p<<" mod "<<k<<'='<<mod_pow(b,p,k)%k;//最后模个k是为了避免k=1的情况
    25 }
    View Code
  • 相关阅读:
    Linux快捷键、文件管理和查询
    Netty
    微软认知服务实现语音识别功能
    基础实用算法
    机器学习十大常用算法
    微服务之Swagger
    Quartz 入门详解 专题
    MyBatis(2):config.xml文件
    深入SpringBoot:自定义Endpoint
    快速掌握Flyway
  • 原文地址:https://www.cnblogs.com/wangzhebufangqi/p/12796176.html
Copyright © 2020-2023  润新知