Phi的反函数
1.P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流
2.Phi的反函数
3.魔力屏障 (magic) 题解4.CF338D GCD Table 题解5.[AGC055B] ABC Supremacy 题解6.[AGC055A] ABC Identity 题解7.QOJ 6504. CCPC Final 2022 D Flower's Land 2题解8.[SDOI2010] 代码拍卖会 题解9.PERIODNI - Periodni 题解 & 笛卡尔树讲解 & 树状背包讲解10.Burnside 定理11.ZS Shuffles Cards 题解P4780 Phi 的反函数
update 2023/2/17 作者笔误
定义
求
普通求法:
首先将
证明:
首先我们考虑在所有数中有
两个定理:
定理 1 证明:
在
- 在
情况下
考虑感性理解,
定理 2.
我们需要求 Phi 的反函数就要先深刻理解上述内容然后进行运用
可以根据上述定理 1 得到:
(在这里我们用到了定理一第一类和定理一第二类的一种特殊情况
得出
由定理二得:
所有质数分解出来不超过
所以可以直接暴力搜索。
(关于判断是否为质数的函数)
因为数据范围在
其实我们只需要找出
例如
第一次找到
具体的:
第一次判断
除以
第二次判断
那么怎么得出答案呢
我们再来重新看看这些式子:
可以看出最后的
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e7+10;
int vis[N],s[30],tot=0,n,cnt=0;
ll ans=1e17+10,prim[N];
void shai(int x){
for(int i=2;i<=x;i++){
if(!vis[i]){
prim[++tot]=i;
}
for(int j=1;j<=tot&&i*prim[j]<=x;j++){
vis[prim[j]*i]=1;
if(!i%prim[j]){
break;
}
}
}
}//质数筛
bool is_p(ll x){
for(int i=2;i* i<=x;i++){
if(x%i==0){
//cout<<x<<i<<endl;
return 0;
}
}
return 1;
}//判断是否为质数
void dfs(int now,int id,ll rev){//id代表当前干过的质数,是个优化
if(now>=ans) return ;//简单优化
if(now==1){
ans=min(rev,ans);
return ;
}
if(is_p(now+1)) dfs(1,id+1,rev*(now+1));
for(int i=id;i<=tot;i++){
if(now%(prim[i]-1)==0){
int a=now;
ll b=rev;
a/=(prim[i]-1);b*=prim[i]; //定理1的情况1
dfs(a,i+1,b);
while(a%prim[i]==0){//定理1的情况2
a/=prim[i];b*=prim[i];
dfs(a,i,b);
}
}
}
}
int main(){
scanf("%d",&n);
shai(sqrt(n)+1);
dfs(n,1,1);
if(ans==1e17+10){//无解或者太大了
printf("-1");
}else printf("%lld",ans);
return 0;
}
//2147483647
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!