【NOI2018模拟4.7】power(扩展欧拉定理)

标签: 信息学 数论 扩展欧拉定理
19人阅读 评论(0) 收藏 举报
分类:

Description:

这里写图片描述

题解:

必要定理:

扩展欧拉定理:

a,b
ab=ab(mod p)(b<ϕ(p))
ab=ab mod ϕ(p)+ϕ(p)(mod p)(b>=ϕ(p))

phi一直迭代下去log次就变成1了,这个易证。

所以这题是个结论题。

Code:

#include<cstdio>
#include<cstring>
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
using namespace std;

const int N = 100000;

int bz[N + 5], p[N];

void Built() {
    fo(i, 2, N) {
        if(!bz[i]) p[++ p[0]] = i;
        fo(j, 1, p[0]) {
            if(i * p[j] > N) break;
            bz[i * p[j]] = 1;
            if(!(i % p[j])) break;
        }
    }
}

int qphi(int x) {
    int s = x;
    for(int i = 1; p[i] * p[i] <= x; i ++)
        if(x % p[i] == 0) {
            s = s / p[i] * (p[i] - 1);
            while(x % p[i] == 0) x /= p[i];
        }
    if(x > 1) s = s / x * (x - 1);
    return s;
}

int n, m, m0, a[N + 5], Q, l, r, d[N];

int dg(int l, int r, int u) {
    if(l > r) return 1;
    if(u > d[0]) return 1;
    if(l == r) return a[l] >= d[u] ? (a[l] % d[u] + d[u]) : a[l];
    int y = dg(l + 1, r, u + 1);
    int b1 = 0, b2 = 0; ll s = 1, x = a[l], mo = d[u];
    while(y) {
        if(y & 1) {
            b1 |= (s * x >= mo) | b2;
            s = s * x % mo;
        }
        y /= 2;
        b2 |= x * x >= mo;
        x = x * x % mo;
    }
    return (b1) ? s + mo : s;
}

int main() {
    freopen("power.in", "r", stdin);
    freopen("power.out", "w", stdout);
    Built();
    scanf("%d %d", &n, &m); m0 = m;
    while(m > 1) {
        m = qphi(m);
        d[++ d[0]] = m;
    }
    fo(i, 1, n) scanf("%d", &a[i]);
    for(scanf("%d", &Q); Q; Q --) {
        scanf("%d %d", &l, &r);
        ll y = dg(l + 1, r, 1);
        ll x = a[l], s = 1, mo = m0;
        while(y) {
            if(y & 1) s = s * x % mo;
            y /= 2; x = x * x % mo;
        }
        printf("%lld\n", s);
    }
}
查看评论

ATM取款机模拟实战项目

我们从现实生活中的ATM取款机的广泛使用,来确定我们编写ATM取款机程序的功能。首先,用户的登陆、用户的取款、用户的查询、用户的转帐、用户密码的修改等功能。根据实际功能的需求完成我们的程序。 “ATM取款机项目”主要描述“ATM取款机”的工作原理,与实际生活相结合,编写一个模拟实战项目。
  • 2015年05月12日 14:29

Codeforces 906D:Power Tower-扩展欧拉定理

传送门 题意: 给你n个数w和一个数p,q个询问,每次询问一个区间[l,r],求w_l^{(w_{l+1}^{(w_{l+2}…^{w_r})})}\mod p Solution: 这...
  • Charlie_jilei
  • Charlie_jilei
  • 2018-02-04 14:59:38
  • 118

扩展欧拉定理

扩展欧拉定理
  • ez_yww
  • ez_yww
  • 2017-07-27 11:03:14
  • 2438

jzoj5636 【NOI2018模拟4.7】power (扩展欧拉定理,phi的性质)

Description 给定正整数m&amp;lt;=1e9与n个数,n&amp;lt;=1e5,q个询问,q&amp;lt;=1e5,每次询问某个区间[l,r]的power值: 即alal+1a...
  • jokerwyt
  • jokerwyt
  • 2018-04-12 19:11:13
  • 18

[扩展欧拉定理] BZOJ 4869 [Shoi2017]相逢是问候

欧拉定理 aϕ(n)≡1(modn),(a,n)=1a^{\phi(n)} \equiv 1 \pmod n,(a,n)=1 进而有 ab≡abmodϕ(n)(modn),(a,n)=1a^b \e...
  • u014609452
  • u014609452
  • 2017-05-03 07:40:47
  • 925

扩展欧拉定理的证明 欧拉定理的推广

大家都很强, 可与之共勉 。我的知乎专栏–欧拉定理推广的证明
  • simpsonk
  • simpsonk
  • 2017-11-29 11:00:12
  • 142

HDU 5895 Mathematician QSC(矩阵快速幂+扩展欧拉定理)

一个很简单的推导,不想说了一个很简单的推导,不想说了 就是指数很大,然后要取模,但是x可能和(s+1)不一定互质就是指数很大,然后要取模,但是x可能和(s+1)不一定互质 那么欧拉定理就不能用了,...
  • Miracle_ma
  • Miracle_ma
  • 2016-09-21 16:32:35
  • 207

拓展欧拉定理总结

1: 欧拉定理: aϕ(p)≡1(mod&amp;nbsp;p)&amp;nbsp;&amp;nbsp;&amp;nbsp;(a,p)=1aϕ(p)≡1(mod&amp;nbsp;p)&amp;n...
  • qq_36808030
  • qq_36808030
  • 2017-10-23 22:14:42
  • 122

JZOJ 4673. 4504. 5635. 【NOI2018模拟4.7】LCS

JZOJ 4673. 4504. 5635. 【NOI2018模拟4.7】LCS DescriptionInputOutputSample Input【样例输入1】3 3 aaa【样例输入2】3 3...
  • liyizhixl
  • liyizhixl
  • 2018-04-08 08:57:59
  • 36

BZOJ3884 上帝与集合的正确用法-扩展欧拉定理

传送门 题意:求2(2(2...))modp2^{(2^{(2...)})}\mod p的值,多组询问。p≤107p≤10^7。 Solution: 根据扩展欧拉定理,我们知道: 当b≥φ(p...
  • Charlie_jilei
  • Charlie_jilei
  • 2018-01-09 16:59:14
  • 53
    个人资料
    持之以恒
    等级:
    访问量: 7万+
    积分: 3154
    排名: 1万+
    友情链接
    文章分类
    最新评论