fzu1759 Super A^B mod C 扩展欧拉定理降幂

扩展欧拉定理:

\[ a^x \equiv a^{x\mathrm{\ mod\ }\varphi(p) + x \geq \varphi(p) ? \varphi(p) : 0}(\mathrm{\ mod\ }p)\]

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
ll aa, cc;
char bb[1000005];
ll getPhi(ll x){
    ll ans=x;
    for(ll i=2; i*i<=x; i++)
        if(x%i==0){
            ans -= ans / i;
            while(x%i==0)   x /= i;
        }
    if(x>1) ans -= ans / x;
    return ans;
}
ll ksm(ll a, ll b, ll c){
    ll re=1;
    while(b){
        if(b&1) re = (re * a) % c;
        a = (a * a) % c;
        b >>= 1;
    }
    return re;
}
int main(){
    while(scanf("%lld %s %lld", &aa, bb, &cc)!=EOF){
        ll phi=getPhi(cc);
        int len=strlen(bb);
        ll tmp=0;
        for(int i=0; i<len; i++){
            tmp = tmp * 10 + bb[i] - ‘0‘;
            if(tmp>=phi)    break;
        }
        if(tmp>=phi){
            tmp = 0;
            for(int i=0; i<len; i++)
                tmp = (tmp * 10 + bb[i] - ‘0‘) % phi;
            printf("%lld\n", ksm(aa, tmp+phi, cc));
        }
        else    printf("%lld\n", ksm(aa, tmp, cc));
    }
    return 0;
}

原文地址:https://www.cnblogs.com/poorpool/p/8137960.html

时间: 2024-10-08 09:34:54

fzu1759 Super A^B mod C 扩展欧拉定理降幂的相关文章

FZU-1759 Super A^B mod C---欧拉降幂&amp;指数循环节

题目链接: https://cn.vjudge.net/problem/FZU-1759 题目大意: 求A^B%C 解题思路: 注意,这里long long需要用%I64读入,不能用%lld 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 typedef long long ll; 7 const in

Fzu1759 Super A^B mod C 题解

题目大意 以若干行的形式给定若干组a,b,c(你不知道有多少组),输出若干行,每行代表相应的abmodc的值.其中1≤a,c≤1000000000,1≤b≤101000000 评测网址 http://acm.fzu.edu.cn/problem.php?pid=1759 题解 数据真的很大..... 不过我们有公式: abmodc=a(bmodφ(c))+φ(c)modc,b≥φ(c); 把它记为(*)式. 我们可以把b先用字符串ch读入,再从高位到低位处理: for(int i = 0; i

[BZOJ 4869][SXOI2017]相逢是问候(扩展欧拉定理+线段树)

Description Informatik verbindet dich und mich. 信息将你我连结.B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数.一共有m个操作,可以 分为两种:0 l r表示将第l个到第r个数(al,al+1,...,ar)中的每一个数ai替换为c^ai,即c的ai次方,其中c是 输入的一个常数,也就是执行赋值ai=c^ai1 l r求第l个到第r个数的和,也就是输出:sigma(ai),l<=i<=rai因为 这个结果可能会很大,所以你只需

[BZOJ 3884]上帝与集合的正确用法(扩展欧拉定理)

Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容易发现,一共有两种不同的“α”. 第三天, 上帝又创造了一个新的元素,称作“β”.“β”被定义为“α”构成的集合.容易发现,一共有四种不同的“β”. 第四天, 上帝创造了新的元素“γ”,“γ”被定义为“β”的集合.显然,一共会有16种不同的“γ”. 如果按照这样下去,上帝创造的第四种元

[BZOJ4869][六省联考2017]相逢是问候(线段树+扩展欧拉定理)

4869: [Shoi2017]相逢是问候 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 1313  Solved: 471[Submit][Status][Discuss] Description Informatikverbindetdichundmich. 信息将你我连结.B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数.一共有m个操作,可以 分为两种:0 l r表示将第l个到第r个数(al,al+1,...,ar)中的每

CodeForces 907F Power Tower(扩展欧拉定理)

Priests of the Quetzalcoatl cult want to build a tower to represent a power of their god. Tower is usually made of power-charged rocks. It is built with the help of rare magic by levitating the current top of tower and adding rocks at its bottom. If

【CodeForces】906 D. Power Tower 扩展欧拉定理

[题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [题解]扩展欧拉定理的形式: $$a^b\equiv a^{b\%\varphi(p)+\varphi(p)} \ \ mod \ \ p \ \ (b\leq \varphi(p))$$ 特别注意当b<φ(p)且(a,p)≠1时不变. 假如现在是三个累乘幂a^(b^c),那么根据扩展欧拉定理: $$a^

【bzoj4869】[Shoi2017]相逢是问候 线段树+扩展欧拉定理

Description Informatikverbindetdichundmich. 信息将你我连结.B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数.一共有m个操作,可以 分为两种:0 l r表示将第l个到第r个数(al,al+1,...,ar)中的每一个数ai替换为c^ai,即c的ai次方,其中c是 输入的一个常数,也就是执行赋值ai=c^ai1 l r求第l个到第r个数的和,也就是输出:sigma(ai),l<=i<=rai因为 这个结果可能会很大,所以你只需要输出结

Luogu[P4139] 上帝与集合的正确用法(扩展欧拉定理)

一句话题面 求 $ 2^{2^{2^{...}}}  $ \(mod\) $p $ 题解 首先我们要知道什么是扩展欧拉定理: 如果\(b ≥ \varphi(p)\) \(a^b \equiv a^{b \ mod \ \varphi(p)\ +\ \varphi(p)} (mod \ p)\) 可以发现,在这道题中\(a=2\),\(b=2^{2^{2^{...}}}\) 然后我们发现$ 2^{2^{2^{...}}} $ 这玩意是 $ ≥ \varphi(p) $ 的 然后我们知道\(\va