[luogu4139]上帝与集合的正确用法【欧拉定理+扩展欧拉定理】

题目大意

让你求\(2^{2^{2^{\cdots}}}(mod)P\)的值。


前置知识

知识1:无限次幂怎么解决

让我们先来看一道全国数学竞赛的一道水题:
让你求解:\(x^{x^{x^{\cdots}}}=2\)方程的解。
对于上面的无限次幂,我们可以把这个式子移上去,得到了\(x^{2}=2\)。
因为指数的原因,所以我们可以直接得到了\(x=\sqrt{2}\)。
以上的问题,启示我们对于这一些无限次幂可以转移来解决。
以上的东西可能用不到

知识2:欧拉定理和扩展欧拉定理

详细请出门左拐洛谷模板区【传送门】。(从入门到入土)
因为这一道题目\(p\)为任意整数,那么无法使用欧拉定理,那么就用比欧拉定理稍微复杂一点点的扩展欧拉定理。
简单介绍一下扩欧定理:
\[a^b\equiv a^{(b\mod\varphi(m))+\varphi(m)}\mod m\]
条件是\(b>= \varphi(m)\)
给一份蒟蒻的线性筛欧拉函数的代码

inline void Get_Phi(int MAXN) {
    phi[1] = 1;
    for (int i = 2; i <= MAXN; i ++) {
        if (!vis[i]) prime[++ Prime_tot] = i, phi[i] = i - 1;
        for (int j = 1; j <= Prime_tot && i * prime[j] <= MAXN ; j ++) {
            vis[i * prime[j]] = 1;
            if (i % prime[j] == 0) { phi[i * prime[j]] = phi[i] * prime[j]; break; }
            else phi[i * prime[j]] = phi[i] * phi[prime[j]];
        }
    }
}

正解

既然我们知道了欧拉公式,那么我们就可以代到原来的幂次中,得到以下的推导:
\[2^{2^{2^{\cdots}}} \ mod \ p = 2^{2^{2^{\cdots}} mod \ \varphi(p) + \varphi(p)}\ mod \ p\]
很明显的是\(\varphi(1)=0\),那么这个就是我们递归的边界。
剩下来的幂次我们可以用快速幂实现。
欧拉函数的筛法就用线性筛就可以了,好像这一道题目就只用单个的筛好像可以更快。
时间复杂度:\(O(T+T\times log_2^p)\)


代码

#include <bits/stdc++.h>
#define ll long long
#define ms(a, b) memset(a, b, sizeof(a))
#define inf 0x3f3f3f3f
#define db double
#define N 10000500
using namespace std;
template <typename T>
inline void read(T &x) {
    x = 0; T fl = 1; char ch = 0;
    for (; ch < '0' || ch > '9'; ch = getchar())
        if (ch == '-') fl = -1;
    for (; ch >= '0' && ch <= '9'; ch = getchar())
        x = (x << 1) + (x << 3) + (ch ^ 48);
    x *= fl;
}
template <typename T>
inline T Power(T x, T y, T Mod) {
    T res = 1;
    for (; y; y >>= 1) {if (y & 1) res = (res * x) % Mod; x = (x * x) % Mod;}
    return res % Mod;
}
ll a, b, c;
ll Prime_tot = 0;
int phi[N], prime[N];
bool vis[N];
inline void Get_Phi(int MAXN) {
    phi[1] = 1;
    for (int i = 2; i <= MAXN; i ++) {
        if (!vis[i]) prime[++ Prime_tot] = i, phi[i] = i - 1;
        for (int j = 1; j <= Prime_tot && i * prime[j] <= MAXN ; j ++) {
            vis[i * prime[j]] = 1;
            if (i % prime[j] == 0) { phi[i * prime[j]] = phi[i] * prime[j]; break; }
            else phi[i * prime[j]] = phi[i] * phi[prime[j]];
        }
    }
}
ll f(ll x) {
    if (x == 1) return 0;
    else return Power(2ll, f(phi[x]) + phi[x], x);
}
int main() {
    int cas; read(cas);
    Get_Phi(1e7+1);
    while (cas --) {
        ll n; read(n);
        printf("%lld\n", f(n));
    }
    return 0;
}

原文地址:https://www.cnblogs.com/chhokmah/p/10645053.html

时间: 2024-07-30 16:56:50

[luogu4139]上帝与集合的正确用法【欧拉定理+扩展欧拉定理】的相关文章

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

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

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

【BZOJ3884】上帝与集合的正确用法 欧拉定理

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

BZOJ 3884(上帝与集合的正确用法-欧拉函数递推找极限)[Template:数论 V2]

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 523  Solved: 237 [Submit][Status][Discuss] Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α"."α"被定义为"元"构成的集合.容

题解 P4139 【上帝与集合的正确用法】

Solution 上帝与集合的正确用法 题目大意:求\(2^{2^{2^{2^{\ldots}}}}mod\;p\) 扩展欧拉定理 首先主角扩展欧拉定理: \[a^b \equiv \begin{cases} a^{b\;mod\;\phi(p)} & gcd(a,p)=1 \\ a^b & gcd(a,b) \neq 1,b < \phi(p) \\ a^{b\;mod\;\phi(p) + \phi(p)} & gcd(a,b)\neq1,b \geq \phi(p)\e

P4139 上帝与集合的正确用法

P4139 上帝与集合的正确用法 求: \[2^{2^{2^\cdots}}\bmod p \] 多测,\(p\le 10^7,T\le 1000\) 扩展欧拉定理基础题,话说昨天晚上证那个定理证了一晚上还没完全弄明白... 众所周知,那个公式是: \[a^n\equiv a^{n\bmod \varphi(p)+\varphi(p)}\pmod p \] 然后带到这个题的式子里 \[2^{2^{2^\cdots}}\equiv 2^{2^{2^\cdots}\bmod \varphi(p)+\

欧拉函数 BZOJ3884 上帝与集合的正确用法

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1843  Solved: 862[Submit][Status][Discuss] Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α"."α"被定义为"元"构成的集合.容易

bzoj 3884 上帝与集合的正确用法 指数循环节

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容易发现,一共有两种不同的“α”. 第三天, 上帝又创造了一个新的元素,称作“β”.“β”被定义为“α”构成的集合.容易发现

【bzoj3884】上帝与集合的正确用法

Portal-->bzoj3884 Solution 这个..额..如果知道扩展欧拉定理的话这题其实..比较裸的样子 虽然说无限个\(2\)听起来就很恐怖但是 根据扩展欧拉定理,当\(b>p\)时,有: \[ a^b\equiv a^{b\%\varphi(p)+\varphi(p)}(mod\ p) \] 然后看一下那个无限个\(2\)翻上去的指数..很明显是\(>p\)的所以..这条式子就可以直接用啦 每次我们都用这条式子去进行一个类似降幂的操作,然后模数到到后面会长成: \[ \v