Luogu 4139 上帝与集合的正确用法

扩展欧拉定理:$a^{b} \equiv a^{b Mod \varphi  (p) + \varphi  (p)}  (Mod  p)  $ $(b \geq \varphi (p))$ 。

这道题中$\varphi (p)$一定是一个偶数,所以余数为$0$。

这样子的话只需要递归求解就可以了,可以知道一定不会超过$log$层。

时间复杂度$O(maxN + Tlognlogn)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;

const int N = 1e7 + 5;

int testCase, pCnt, pri[N];
ll n, phi[N];
bool np[N];

template <typename T>
inline void read(T &X) {
    X = 0; char ch = 0; T op = 1;
    for(; ch > ‘9‘|| ch < ‘0‘; ch = getchar())
        if(ch == ‘-‘) op = -1;
    for(; ch >= ‘0‘ && ch <= ‘9‘; ch = getchar())
        X = (X << 3) + (X << 1) + ch - 48;
    X *= op;
}

void sieve() {
    phi[1] = 1LL;
    for(int i = 2; i < N; i++) {
        if(!np[i]) pri[++pCnt] = i, phi[i] = i - 1;
        for(int j = 1; j <= pCnt && i * pri[j] < N; j++) {
            np[i * pri[j]] = 1;
            if(i % pri[j] == 0) {
                phi[i * pri[j]] = phi[i] * pri[j];
                break;
            }
            phi[i * pri[j]] = phi[i] * (pri[j] - 1);
        }
    }
}

inline ll pow(ll a, ll b, ll P) {
    ll res = 1LL;
    for(; b > 0; b >>= 1) {
        if(b & 1) res = res * a % P;
        a = a * a % P;
    }
    return res;
}

ll solve(ll now) {
    if(now == 1) return 0;
    return pow(2LL, phi[now] + solve(phi[now]), now);
}

int main() {
    sieve();
    for(read(testCase); testCase--; ) {
        read(n);
        printf("%lld\n", solve(n));
    }
    return 0;
}

原文地址:https://www.cnblogs.com/CzxingcHen/p/9556355.html

时间: 2024-10-30 01:39:15

Luogu 4139 上帝与集合的正确用法的相关文章

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 上帝与集合的正确用法

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 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容易发现,一共有两种不同的“α”. 第三天, 上帝又创造了一个新的元素,称作“β”.“β”被定义为“α”构成的集合.容易发现

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

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

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

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

题解 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)+\

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

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

BZOJ3884: 上帝与集合的正确用法

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