标签:上帝 phi int 定理 ans MOD ll 欧拉 mod
上帝与集合的正确做法 拓展欧拉定理 欧拉函数性质
题意
求
\[2^{2^{2^{2...}}} \ mod \ p \]\[p \leq 10^7 \]分析
拓展欧拉定理
\[a^b = \begin{cases} a^{b \ mod \ \phi(p)},gcd(a,p) = 1\\ a^b \ ,\ gcd(a,p) \neq 1 \and b\leq \phi(p)\\ a^{b \ mod \ \phi(p) + \phi(p)}, \ gcd(a,p)\neq1\and b\geq \phi(p) \end{cases} \]欧拉函数的一种计算式:
\[\phi(n) = n \prod_{i=1}(1-\frac{1}{p_i}) \]可以推出
- \(n>2\)时,\(2|\phi(n)\) 与\(n\)互质的数总是成对出现
- \(n\)为奇数时,\(\phi(2n) = \phi(n)\)
可以对上式变换
\[2^{2^{2^{2...}}} \ mod \ p = 2^{P \ mod \ \phi(p) + \phi(p)} \ mod \ p\\ P \ mod \ \phi(p) = 2^{P' \ mod \ \phi(\phi(p)) + \phi(\phi(p))} \ mod \ \phi(p)\\ ... \]我们发现求这个的过程相当于对\(p\)迭代\(phi(x)\)函数
而容易发现**\(p -> phi(p)\) 如果\(2|p\)那么大小至少减小一半(计算式) **
如果\(p\)是奇数,那么\(\phi(p) = \phi(2p)\) ,\(2 | phi(2p)\) 即一定会成为偶数
因此经过\(2log\)次迭代就会变为1
于是直接暴力迭代就会快速迭代完毕
代码
#include<bits/stdc++.h>
#define pii pair<ll,ll>
#define fi first
#define se second
using namespace std;
typedef long long ll;
inline ll rd(){
ll x;
scanf("%lld",&x);
return x;
}
const int MOD = 1e9 + 7;
inline int mul(int a,int b){
int res = (ll)a * b % MOD;
if(res < 0) res += MOD;
return res;
}
inline void add(int &a,int b){
a += b;
if(a >= MOD) a -= MOD;
}
inline void sub(int &a,int b){
a -= b;
if(a < 0) a += MOD;
}
const int maxn = 3e6 + 5;
inline int ksm(int a,int b = MOD - 2,int m = MOD){
int ans = 1;
int base = a;
while(b){
if(b & 1) ans = (ll)ans * base % m;
base = (ll)base * base % m;
b >>= 1;
}
return ans;
}
inline int get_phi(int n) {
int m = int(sqrt(n + 0.5));
int ans = n;
for (int i = 2; i <= m; i++) {
if (n % i == 0) {
ans = ans / i * (i - 1);
while (n % i == 0) n /= i;
}
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
}
int get(int x){
if(x < 3) return 0;
int n = get_phi(x);
return ksm(2,n + get(n),x);
}
int main(){
int T = rd();
while(T--){
int x = rd();
printf("%d\n",get(x));
}
}
标签:上帝,phi,int,定理,ans,MOD,ll,欧拉,mod 来源: https://www.cnblogs.com/hznumqf/p/15099731.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。