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

【题目大意】

求2^(2^(2^(2^(2^...)))) mod p。

【思路】

蒟蒻在知道用欧拉做的前提下,对这题目瞪了好久没有明白,看了正解扑通一声跪下来orz直接搬运popoqqq大爷的吧反正有水印(.

【错误点】

快速幂没有开longlong……

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 typedef long long ll;
 6 using namespace std;
 7
 8 int get_phi(int x)
 9 {
10     int res=x;
11     for (int i=2;i*i<=x;i++)
12     {
13         if (x%i==0)
14         {
15             res-=res/i;
16             while (x%i==0) x/=i;
17         }
18     }
19     if (x>1) res-=res/x;
20     return res;
21 }
22
23 int quick_power(ll x,int y,int MOD)//这里有可能会溢出,用long long
24 {
25     ll ret=1;
26     while (y)
27     {
28         if (y&1) ret=(ret*x)%MOD;
29         x=(x*x)%MOD;
30         y>>=1;
31     }
32     return ret;
33 }
34
35 int solve(int p)
36 {
37     if (p==1) return 0;
38     int k=0;
39     while (!(p&1)) p>>=1,++k;
40     int phi=get_phi(p);
41     int re=solve(phi);
42     re=(re-k%phi+phi)%phi;
43     int ans=quick_power(2,re,p)%p;
44     return (ans<<k);
45 }
46
47 void init()
48 {
49     int T;
50     scanf("%d",&T);
51     while (T--)
52     {
53         int p;
54         scanf("%d",&p);
55         printf("%d\n",solve(p));
56     }
57 }
58
59 int main()
60 {
61     init();
62     return 0;
63 }
时间: 2024-07-28 22:28:35

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

题解 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 上帝与集合的正确用法 指数循环节

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

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

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