码迷,mamicode.com
首页 > 其他好文 > 详细

P5091 【模板】欧拉定理

时间:2019-11-09 13:32:44      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:can   thml   msu   输入   copy   tps   tar   nbsp   mat   

如有乱码,请点击

 

题目背景

出题人也想写有趣的题面,可惜并没有能力。

题目描述

给你三个正整数,a,m,ba,m,b,你需要求:
a^b \bmod mabmodm

输入格式

一行三个整数,a,m,ba,m,b

输出格式

一个整数表示答案

输入输出样例

输入 #1
2 7 4
输出 #1
2
输入 #2
998244353 12345 98765472103312450233333333333
输出 #2
5333

说明/提示

注意输入格式,a,m,ba,m,b 依次代表的是底数、模数和次数

样例1解释:
2^4 \bmod 7 = 224mod7=2
输出2

数据范围:

对于全部数据:
1≤a≤10^91a109
1≤b≤10^{20000000}1b1020000000
1≤m≤10^81m108

 
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
int a,b,m,temp,phi,ans=1;
bool flag;
int main(){
    int i;
    char c;
    scanf("%d%d",&a,&m);
    temp=phi=m;
    for(i=2;i*i<=m;++i){
        if(temp%i==0){
        	phi=phi-phi/i;
            while (temp%i==0){
                temp/=i;
            }
        }
    }
    if (temp>1){
        phi=phi-phi/temp;
    }
    while (!isdigit(c=getchar()));
    for (;isdigit(c);c=getchar()){
        b=b*10+c-‘0‘;
        if (b>=phi){
            flag=true;
            b%=phi;
        }
    }
    if (flag){
        b+=phi;
    }
    for (i=20;i>=0;--i){
        ans=1ll*ans*ans%m;
        if (b&(1<<i)){
            ans=1ll*ans*a%m;
        }
    }
    cout<<ans;
    return 0;
}

  

 

P5091 【模板】欧拉定理

标签:can   thml   msu   输入   copy   tps   tar   nbsp   mat   

原文地址:https://www.cnblogs.com/xiongchongwen/p/11825010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!