P4780-Phi的反函数【dfs】

正题

题目链接:https://www.luogu.com.cn/problem/P4780


题目大意

给出nnn,求一个最小的xxx满足φ(x)=n\varphi(x)=nφ(x)=n
若不存在或者大于2312^{31}231则输出−1-11

1≤n≤2311\leq n\leq 2^{31}1n231


解题思路

考虑用φ\varphiφ比较常用的公式,把nnn拆成若干个∏(pi−1)∗pici\prod (p_i-1)*p_i^{c_i}(pi1)pici的形式。因为这个不会超过logloglog个所以可以暴力搜索比较小的质数,然后直到nnn剩下一个pi+1p_i+1pi+1时或111时再暴力判断。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=46360;
ll n,ans,cnt,pri[N/10];
bool v[N];
void Prime(){for(ll i=2;i<N;i++){if(!v[i])v[i]=1,pri[++cnt]=i;for(ll j=1;j<=cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break; }}return;
}
bool IsPri(ll x){if(x%2==0)return 0;for(ll i=3;i*i<=x;i+=2)if(x%i==0)return 0;return 1;
}
void dfs(ll phi,ll x,ll k){if(phi>(1ll<<31))return;if(x==1){ans=min(ans,phi);return;}if(x>sqrt(n)&&IsPri(x+1))ans=min(ans,phi*(x+1));if(pri[k]>x)return;for(ll i=k;i<=cnt;i++){if(x%(pri[i]-1)==0){ll z=x/(pri[i]-1),p=phi*pri[i];dfs(p,z,i+1); while(z%pri[i]==0){p*=pri[i];z/=pri[i];dfs(p,z,i+1);}}}return;
}
signed main()
{scanf("%lld",&n);Prime();ans=(1ll<<32);dfs(1,n,1);if(ans==(1ll<<32))puts("-1");else printf("%lld\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

染色(树链剖分 洛谷-P2486)

文章目录题目描述解析代码thanks for reading&#xff01;传送门首先&#xff0c;对hash学姐对本题拔刀相助的debug行为表示衷心的感谢 题目描述 解析 用线段树维护颜色序列个数、最左颜色与最右颜色 合并时如果左儿子的最右颜色等于右儿子的最左颜色&#xff0c;就把加和-1 在…

第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) AC(带悔贪心)

下面两个题都是选择iii有个价值如果选择iii则不能选择i−1,i1i-1,i1i−1,i1&#xff0c;让价值最大或最小 P1792 [国家集训队]种树 野心qwq 的博客 #include<bits/stdc.h>using namespace std;const int N200010; int n,m; int a[N]; int fr[N],to[N]; priority_queue…

C# 8中的范围类型(Range Type)

C# 8.0中加入了一个新的范围类型(Range Type)。这里我们首先展示一些代码&#xff0c;并一步一步为代码添加一些不同的东西, 为大家展示一下范围类型的功能和用法。我们最原始的代码如下&#xff1a;这里我们显示的定义了我们查询数组的索引1-3, 并输出他们的值。毫无疑问&…

bzoj#4423-[AMPPZ2013]Bytehattan【并查集】

正题 题目链接:https://darkbzoj.tk/problem/4423 题目大意 给出一个n∗nn*nn∗n的网格图&#xff0c;然后四联通的点之间连接。每次删掉一条边求这条边的两个点是否连通。强制在线。 1≤n≤1500,1≤m≤2n(n−1)1\leq n\leq 1500,1\leq m\leq 2n(n-1)1≤n≤1500,1≤m≤2n(n−…

选数游戏(ybtoj-二叉堆)

文章目录题目描述解析代码thanks for reading&#xff01;题目描述 解析 一道很考验代码能力与思维的题 &#xff08;我不是在为自己的菜找理由&#xff09; 首先由于可以每一列都有类似于环的性质 所以我们可以忽略点的出入的纵坐标的位置&#xff0c;只考虑每列选几个 首先&…

CF741C Arpa’s overnight party and Mehrdad’s si

题目描述&#xff1a; 有n对情侣&#xff08;2n个人&#xff09;围成一圈坐在桌子边上&#xff0c;每个人占据一个位子&#xff0c;要求情侣不能吃同一 种食物&#xff0c;并且桌子上相邻的三个人的食物必须有两个人是不同的&#xff0c;只有两种食物&#xff08;1或者是2&…

开源库支付库Magicodes.Pay发布

Magicodes.Pay&#xff0c;是心莱科技团队提供的统一支付库&#xff0c;相关库均使用.NET标准库编写&#xff0c;支持.NET Framework以及.NET Core。目前支持以下支付方式和功能&#xff1a;支付宝APP支付支付宝Wap支付支付宝国际支付 支持分账微信小程序支付微信APP支付统一支…

火车载客(ybtoj-二叉堆)

文章目录题目描述解析我的思路代码题解思路题目描述 解析 我的思路 其实就是线段覆盖的一个变体 贪心的想&#xff1a; 把游客按右端点升序排序 后面的证明就和线段覆盖一样了 如果有两个游客冲突 我们应该选右端点靠右的 因为这样对以后继续在右边出现的游客来说肯定不会更差…

CF835E-The penguin‘s game【交互】

正题 题目链接:https://www.luogu.com.cn/problem/CF835E 题目大意 长度为nnn的序列中有两个yyy其他都是xxx&#xff0c;给出n,x,yn,x,yn,x,y。你每次可以询问一个下标集合的数字异或和&#xff0c;要求在191919次以内找到这两个yyy的位置。 1≤n≤1000,1≤x,y≤109,x≠y1\le…

2021 CCPC E. 被遗忘的计划(循环卷积+快速幂)

E. 被遗忘的计划 别人的简洁写法 #include<bits/stdc.h>using namespace std; using lllong long; const ll INF0x3f3f3f3f3f3f3f3fll; const ll mod1e97; using vlvector<ll>; vl operator *(vl a,vl b) {vl v(a.size(),-INF);for(int i0;i<a.size();i)for(i…

NetCore基于EasyNetQ的高级API使用RabbitMq

一、消息队列消息队列作为分布式系统中的重要组件&#xff0c;常用的有MSMQ&#xff0c;RabbitMq&#xff0c;Kafa&#xff0c;ActiveMQ&#xff0c;RocketMQ。至于各种消息队列的优缺点比较&#xff0c;在这里就不做扩展了&#xff0c;网上资源很多。更多内容可参考 消息队列及…

bzoj#4722-由乃【倍增,抽屉原理,bitset】

正题 题目链接:https://darkbzoj.tk/problem/4722 题目大意 给出一个长度为nnn的序列值域为[0,v)[0,v)[0,v)&#xff0c;要求支持操作 询问一个区间能否找到两个没有交的非空下标集合使得这些位置的和加上集合的大小相等。区间立方然后取模vvv。 1≤n≤105,1≤v≤10001\leq …

二分图匹配(二)

文章目录例题&#xff1a;NC20483 [ZJOI2009]假期的宿舍题目描述&#xff1a;题解&#xff1a;NC51316 Going Home题目描述&#xff1a;题解&#xff1a;NC107638 poj3041 Asteroids题目描述&#xff1a;题解&#xff1a;NC20472 [ZJOI2007]矩阵游戏题目描述&#xff1a;题解&a…

质数和分解(动态规划)

文章目录题目描述解析记忆化搜索代码无限背包代码thanks for reading&#xff01;题目描述 解析 很好的题 记忆化搜索 我一开始的思路就是记忆化搜索 为了不重复&#xff0c;搜索的时候规定拆出来一个数A后一会不能再拆比A更小的了 这样就不难写了 &#xff08;忽略我n^2的素…

Graph Theory Class(Min25求1~n质数和)

Graph Theory Class 原理不会板子抄的。 // n^0.75/log 求1~n的质数和 #include <bits/stdc.h> #define ll long long using namespace std; const int N 10000010;ll n,mod; int prime[N],id1[N],id2[N],vis[N],cnt,m; ll g[N],s[N],a[N],T; int ID(ll x){return x<…

【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权

上篇文章介绍了如何使用Dapper持久化IdentityServer4&#xff08;以下简称ids4&#xff09;的信息&#xff0c;并实现了sqlserver和mysql两种方式存储&#xff0c;本篇将介绍如何使用ids4进行客户端授权。.netcore项目实战交流群&#xff08;637326624&#xff09;&#xff0c;…

内存管理(ybtoj-二叉堆)

文章目录题目描述解析代码题目描述 解析 这题感觉做的不错 不难看出&#xff0c;要维护一个空闲的优先队列&#xff0c;在每次申请时弹出编号最小的 但是对判断当前哪些被访问的内存重新进入空闲状态是一个难题 最简单的办法是存起来每次扫一遍判断 但这样在极端数据时会TLE&…

P4233-射命丸文的笔记【NTT,多项式求逆】

正题 题目链接:https://www.luogu.com.cn/problem/P4233 题目大意 随机选择一条有哈密顿回路的nnn个点的竞赛图&#xff0c;求选出图的哈密顿回路的期望个数。 对于每个n∈[1,N]n\in[1,N]n∈[1,N]求答案。 1≤N≤1051\leq N\leq 10^51≤N≤105 解题思路 竟然自己推出来了泪…

HDU 5008 Boring String Problem ( 后缀数组求本质不同第k大子串)

Boring String Problem Zeronera题解 预处理sum数组记录不同字符串的个数&#xff0c;即sum[i] n- sa[i] 1 -height[i] sum[i-1] (n为原串长度) 对于每个k 若k > sum[n] 则输出0 0 &#xff0c;即k大于不同子串的总数 否则&#xff0c;二分sum数组找到第k小子串所在的…

HAPPY_TOGETHER_WEEK15_ENJOY

文章目录7-1 6翻了7-2 幸运彩票7-3 点赞7-4 猜数字7-5 出租7-6 A-B7-7 连续因子7-8 天梯赛座位分配7-9 大笨钟7-10 敲笨钟7-11 整除光棍7-1 6翻了 #include<iostream> #include<string> using namespace std; int main() {string str;int s;int count 0;getline(…