正题

题目链接: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. 初识nest.js

    nest的核心概念: Nest的核心概念是提供一种体系结构,它帮助开发人员实现层的最大分离,并在应用程序中增加抽象. 架构预览: 主要有三个核心概念:模块Module,  控制器Controller, ...

  2. [转]C# 互操作性入门系列(三):平台调用中的数据封送处理

    参考网址:https://www.cnblogs.com/FongLuo/p/4512738.html C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列( ...

  3. C#综合细说进程、应用程序域与上下文

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提 ...

  4. WebAPI中controller添加[AllowAnonymous]无效的解决方法

    对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...

  5. Java随手记录

    Spring @Configuration注解及配置方法 转自:https://www.jb51.net/article/184822.htm Spring @Configuration注解 Spri ...

  6. 一. Go微服务--隔离设计

    1. 前言 隔离设计源于船舶行业,一般而言无论大船还是小船,都会有一些隔板,将船分为不同的空间,这样如果有船舱漏水一般只会影响这一小块空间,不至于把整个船都给搞沉了. 同样我们的软件服务也是一个道理, ...

  7. Python中的私有属性私有方法、类属性类方法以及单例设计模式

    私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...

  8. appnium显式等待机制

    强制等待: sleep不推荐全局隐式等待 全局隐式等待: 在服务端等待 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); ...

  9. Hive的分桶表

    [分桶概述] Hive表分区的实质是分目录(将超大表的数据按指定标准细分到指定目录),且分区的字段不属于Hive表中存在的字段:分桶的实质是分文件(将超大文件的数据按指定标准细分到分桶文件),且分桶的 ...

  10. 快速模式第二包: quick_inI1_ouR1()

    文章目录 1. 序言 2. quick_inI1_outR1()流程图 3. 快速模式消息②数据包格式 4. 源码分析 4.1 quick_inI1_outR1() 4.2 quick_inI1_ou ...