正题

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


题目大意

给出\(n\),求一个最小的\(x\)满足\(\varphi(x)=n\)。

若不存在或者大于\(2^{31}\)则输出\(-1\)。

\(1\leq n\leq 2^{31}\)


解题思路

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


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;
}

P4780-Phi的反函数【dfs】的更多相关文章

  1. 【BZOJ-3643】Phi的反函数 数论 + 搜索

    3643: Phi的反函数 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 141  Solved: 96[Submit][Status][Discuss ...

  2. bzoj3643 Phi的反函数

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3643 [题解] n = p1^a1*p2^a2*...*pm^am phi(n) = p1( ...

  3. 【BZOJ 3642】Phi的反函数

    http://www.lydsy.com/JudgeOnline/problem.php?id=3643 因为\[\varphi(n)=\prod_i p_i^{k_i-1}(p_i-1),n=\pr ...

  4. 【BZOJ 3643】Phi的反函数 数搜索

    这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝. #include <cstdio> #include <cmath> typedef long lon ...

  5. [BZOJ]3643 Phi的反函数

    我承认开这篇文章只是因为好笑…… 估计Zky神看见3737会很郁闷吧. http://www.lydsy.com/JudgeOnline/problem.php?id=3643 本来想直接交3737改 ...

  6. bzoj 3643Phi的反函数

    3643: Phi的反函数 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 298  Solved: 192[Submit][Status][Discus ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. bzoj题目分类

    转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树 ...

  9. HDU 1695 GCD 欧拉函数+容斥定理

    输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...

随机推荐

  1. Java常用类之时间类

    JDK8之前日期时间API 1. java.lang.System类 2. java.util.Date类 3. java.text.SimpleDateFormat类 4. java.util.Ca ...

  2. SpringBoot使用@Scheduled创建定时任务

    定时任务一般会存在中大型企业级项目中,为了减少服务器.数据库的压力往往会采用时间段性的去完成某些业务逻辑.比较常见的就是金融服务系统推送回调,一般支付系统订单在没有收到成功的回调返回内容时会持续性的回 ...

  3. 1、Spark简介(Python版)

    此文为个人学习笔记如需系统学习请访问http://dblab.xmu.edu.cn/blog/1709-2/ Spark具有如下几个主要特点:  运行速度快    Spark使用先进的DAG(Dir ...

  4. js判断checkbox是否选中 .checked不管用

    今天开发遇到一个小问题,记小本本记小本本 document.getElementById("id").checked //正确 //如果返回值为true代表选中 //如果返回值为f ...

  5. 关于PLSQL中的一些问题总结:在PLSQL中书写DDL等

    关于问题前导,使用的数据表中涉及到的字段和类型: 在PLSQL中create.drop.truncate等DDL是没有办法直接执行的. 必须要使用: Execute immediate 'DDL语句' ...

  6. Struts2之国际化

    时间:2017-1-11 11:12 --国际化Struts2已经对国际化进行了封装,我们只需要根据其提供的API进行访问即可.要使用国际化的Action必须继承ActionSupport.1.什么是 ...

  7. linux使用xampp安装MediaWiki环境

    1.下载并安装xampp 下载xampp 在下载页面下载. 放置到相应目录 将xampp-linux-x64-5.6.3-0-installer.run文件复制到部署机器的/root目录下 安装 [r ...

  8. TCP模拟QQ聊天功能

    需求: 模拟qq聊天功能:实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,然后服务器端也可以输入信息,同样信息在客户端和服务端显示. 提示: 客户端 1) ...

  9. MyBatis-Plus 代码生成器模板

    MyBatis-Plus 代码生成器模板 maven 依赖 <!--Mysql--> <dependency> <groupId>mysql</groupId ...

  10. Python - 3.8 新特性之仅位置参数 & 仅关键字参数

    前置知识 Python 函数:https://www.cnblogs.com/poloyy/p/15092393.html 什么是仅限位置形参 仅限位置形参是 Python 3.8 才有的新特性 新增 ...