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

Portal-->bzoj3884

Solution

  这个。。额。。如果知道扩展欧拉定理的话这题其实。。比较裸的样子

  虽然说无限个\(2\)听起来就很恐怖但是

  根据扩展欧拉定理,当\(b>p\)时,有:
\[
a^b\equiv a^{b\%\varphi(p)+\varphi(p)}(mod\ p)
\]
  然后看一下那个无限个\(2\)翻上去的指数。。很明显是\(>p\)的所以。。这条式子就可以直接用啦

  每次我们都用这条式子去进行一个类似降幂的操作,然后模数到到后面会长成:
\[
\varphi(\varphi(\varphi(...\varphi(p)))))
\]
  这样。。

  进行若干次操作之后会变成\(1\),那么这个时候无论后面再怎么降下去结果都是固定的了

  至于这个若干次操作到底是多少,我们可以感性的理解一下(理性证明不会qwq),\(\varphi(p)\)会不断缩小然后每次至少会除去一个\(2\),所以最多是\(log\)级别的

  那所以直接递归求解就好了

  

  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=1e7+10;
int phi[MAXN],p[MAXN];
bool vis[MAXN];
int T,n;
void prework(int n);
int f(int n);
int ksm(int x,int y,int p);

int main(){
#ifndef ONLINE_JUDGE
    freopen("a.in","r",stdin);
#endif
    scanf("%d",&T);
    prework(MAXN-1);
    for (int o=1;o<=T;++o){
        scanf("%d",&n);
        printf("%d\n",f(n));
    }
}

void prework(int n){
    int cnt=0;
    phi[1]=1;
    for (int i=2;i<=n;++i){
        if (!vis[i]){
            phi[i]=i-1;
            p[++cnt]=i;
        }
        for (int j=1;j<=cnt&&p[j]*i<=n;++j){
            vis[i*p[j]]=true;
            if (i%p[j]==0){
                phi[i*p[j]]=phi[i]*p[j];
                break;
            }
            else
                phi[i*p[j]]=phi[i]*phi[p[j]];
        }
    }
}

int f(int p){
    if (p==1) return 0;
    return ksm(2,f(phi[p])+phi[p],p);
}

int ksm(int x,int y,int mod){
    int ret=1,base=x;
    for (;y;y>>=1,base=1LL*base*base%mod)
        if (y&1) ret=1LL*ret*base%mod;
    return ret;
}

原文地址:https://www.cnblogs.com/yoyoball/p/9220623.html

时间: 2024-08-30 15:52:57

【bzoj3884】上帝与集合的正确用法的相关文章

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

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

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

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

bzoj3884: 上帝与集合的正确用法 欧拉降幂公式

欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert/article/details/43955611 注:知道欧拉公式是远远不够的,还要知道欧拉降幂公式,因为当指数很大的时候需要用 然后欧拉降幂公式不要求A,C互质,但是B必须大于等于C的欧拉函数 吐槽:感觉记忆化搜索影响不大啊,当然肯定是因为太水了 这样复杂度是O(T*sqrt(p)*logp)

bzoj千题计划264:bzoj3884: 上帝与集合的正确用法

http://www.lydsy.com/JudgeOnline/problem.php?id=3884 欧拉降幂公式 #include<cmath> #include<cstdio> using namespace std; int get_phi(int p) { int phi=p; int m=sqrt(p); for(int i=2;i<=m;++i) if(p%i==0) { phi=phi/i*(i-1); while(p%i==0) p/=i; } if(p&

【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 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α"."α"被定义为"元"构成的集合.容

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

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB[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)+\

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

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