3643: Phi的反函数

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 298  Solved: 192
[Submit][Status][Discuss]

Description

Input

 

Output

 

Sample Input

4

Sample Output

5
 
  这道题我只能说是一道披着搜索外衣的数学题,核心都在数学知识上,于是数学能力令人发指的我跪了……
  在讲这道题之前我们先明确一下几点:
    1.一个数x的质因子若大于sqrt(x)则这个质因子最多只有一个。
    2.我们设pk为已知数x的第k个素因子ak为该素因子在x的素因子中有几个则φ(x)=p1^(a1-1)*(p1-1)*p2^(a2-1)*(p2-1)……
    3.由1可知我们线筛只用筛到sqrt(INF),大于它直接暴力检测。
    4.由2可知如果对于一个素数p,p-1是n的因子,则p可对答案产生贡献。
  于是知道了以上几点我们就好说多了,我们只要枚举每一个素数p,如果p-1是当前now的因子就接下去dfs并枚举a,对于那个大于sqrt(n)的因子我们直接判断如果now+1是素数且now+1>sqrt(n),我们就检查他是否对答案有贡献。
  不知道有没有人和我和Q某犇一样对于是now+1还是now还是now-1有疑问。为了周全,我还是说一下。如果当前now满足以上条件那么此时now=p^(a-1)*(p-1),由于p大于sqrt(n),a一定为1,所以就变成了now=p-1,那么p=now+1。
  差点忘说了,我们为什么会去选择dfs这种方式呢?因为貌似可以证明,在题目给的数据最多只有10个(不同的)素因子,一个素因子最多只出现30次,所以dfs没跑。
 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
#define N 50005
using namespace std;
long long sq,n,ss[N],zz,ans=;
bool fss[N];
bool pri(long long x)
{
for(int i=;i<=sqrt(x);i++)
if(x%i==)return ;
return ;
}
void dfs(long long sum,long long wz,long long now)
{
if(sum>ans)return;
if(now==)
{
ans=min(ans,sum);
return;
}
if(now>sq&&pri(now+))ans=min(ans,(now+)*sum);
for(int i=wz;i<=zz&&ss[i]-<=sq&&ss[i]-<=now;i++)
{
if(now%(ss[i]-)==)
{
int x=now/(ss[i]-),y=sum*ss[i];
dfs(y,i+,x);
while(x%ss[i]==)
{
x/=ss[i],y*=ss[i];
dfs(y,i+,x);
}
}
}
}
int main()
{
scanf("%lld",&n);
sq=sqrt(n);
for(int i=;i<=sqrt(n);i++)
{
if(!fss[i])
{
zz++;
ss[zz]=i;
}
for(int j=;j<=zz&&i*ss[j]<N;j++)
{
fss[i*ss[j]]=;
if(i%ss[j]==)break;
}
}
dfs(,,n);
if(ans<2147483648ll)
printf("%lld\n",ans);
else printf("-1\n");
return ;
}

bzoj 3643Phi的反函数的更多相关文章

  1. 【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 ...

  2. [BZOJ]3643 Phi的反函数

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

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

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

  4. BZOJ 2818

    2818:GCD Description 给定整数$N$,求$1\le x,y\le N$且$\gcd{x,y}$为素数的数对$(x,y)$有多少对. Input $N$ Output RT Samp ...

  5. [bzoj 1471] 不相交路径 (容斥原理)

    题目描述 给出一个N(n<=150)N(n<=150)N(n<=150)个结点的有向无环简单图.给出444个不同的点aaa,bbb,ccc,ddd,定义不相交路径为两条路径,两条路径 ...

  6. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  7. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  8. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  9. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

随机推荐

  1. 细谈unity资源管理的设计

    一.概要 本文主要说说Unity是如何管理的,基于何种方式,基于这种管理方式,又该如何规划资源管理,以及构建bundle,是后面需要详细讨论的. 二.Unity的资源管理方式 2.1 资源分类 uni ...

  2. Windows 10开发基础——启动默认应用的URI

    主要内容:通过指定的URI来启动默认的应用(设置,应用商店,地图,人脉) 方法一:直接在XAML中添加如下代码 <TextBlock x:Name="LocationDisabledM ...

  3. 零元学Expression Blend 4 - Chapter 24 以实作了解Cover Flow功能

    原文:零元学Expression Blend 4 - Chapter 24 以实作了解Cover Flow功能 今天要介绍一个Silverlight Toolkit内好用且在图片展示操作上很常见的元件 ...

  4. Cindy components(配色很不错)

    https://sourceforge.net/projects/tcycomponents/

  5. WinForm子线程调用主线程

    public Form1() { InitializeComponent(); Thread t = new Thread(ThreadWorker); t.Start(); } private vo ...

  6. UWP 发送短信公用倒计时按钮

    1.要求:      发送验证码按钮,点击后,会倒计时60s,之后才能再次点击.不同界面的多个验证码按钮共享这个倒计时时间. 2.操作步骤       1) 从登录界面-->忘记密码输入手机号- ...

  7. Redis简介和安装

    Redis介绍 Redis是一种Key-Value存储系统(数据库),其提供了一组丰富的数据结构,如List,Sets,Hashes和Ordered Sets Redis安装 wget <Red ...

  8. 主要C++流派,看看你是哪一流

    1. 经典C++流:类是核心,例程多用C Runtime的,很少用模版,一般是正统教育的结果.2. 古典C流:基本上当C用,偶尔用用对象,不使用异常,喜欢怀旧.3. MFC流:秉承MFC的风格,主要使 ...

  9. Awesome C/C++(图像部分)

    GUI Graphic User Interface CEGUI - Flexible, cross-platform GUI library. FLTK - Fast, light, cross-p ...

  10. 说说IEnumerable和yield

    IEnumerable数据类型是我比较喜欢的数据类型,特别是其强类型IEnumerable<T>更获得Linq的支持使得代码看起来更加优雅.整洁. 编写返回值为IEnumerable(或I ...