博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 3643: Phi的反函数
阅读量:4881 次
发布时间:2019-06-11

本文共 1481 字,大约阅读时间需要 4 分钟。

3643: Phi的反函数

Time Limit: 10 Sec  Memory Limit: 64 MB

Description

Input

 

Output

 

Sample Input

4

Sample Output

5

HINT

 

Source

 

Tips:

  自己也没怎么搞懂;

 

Code:

#include
#include
#include
#include
#define MAXN 200008using namespace std;long long n,m,prime[MAXN],tot,flag[MAXN],ans;void init(){ for(long long i=2;i<=MAXN-8;i++){ if(!flag[i]){ flag[i]=1; prime[++tot]=i; } for(long long j=1;j<=tot&&i*prime[j]<=MAXN-8;j++){ flag[i*prime[j]]=1; if(i%prime[j]==0) break; } }}bool check(long long u){ for(int i=1;prime[i]*prime[i]<=u;i++){ if(u%prime[i]==0) return 0; } return 1;}void dfs(long long x,long long y,long long z){ if(z>=ans) return; if(y==1){ ans=min(ans,z); return; } if(y*y>n&&check(y+1)){ ans=min(ans,z*(y+1)); return; } for(int i=x;prime[i]-1<=y&&(prime[i]-1)*(prime[i]-1)<=n;i++) if(y%(prime[i]-1)==0){ long long xx=y /(prime[i]-1); long long yy=z*prime[i]; dfs(i+1,xx,yy); while(xx%prime[i]==0){ xx=xx/prime[i]; yy=yy*prime[i]; dfs(i+1,xx,yy); } }}int main(){ tot=0; ans=(long long)1<<31; init(); scanf("%lld",&n); dfs(1,n,1); if(ans==(long long)1<<31){ printf("-1"); }else{ printf("%lld",ans); }}

 

转载于:https://www.cnblogs.com/WQHui/p/7536850.html

你可能感兴趣的文章
关于Spring配置文件提示的插件下载
查看>>
软件工程师就业前景
查看>>
asp.net成员管理系统membership详解教程(一)
查看>>
情态动词
查看>>
关于linux的一些基础知识
查看>>
架构漫谈阅读感悟一
查看>>
记一个数据库游标的实例
查看>>
netcore2.0 ORM框架中如何配置自定义的主外键加载
查看>>
基础练习 十进制转十六进制
查看>>
156 合并区间
查看>>
C# Base64加密解密
查看>>
HDU 1255 覆盖的面积 线段树+扫描线
查看>>
关联映射 ---- Hibernate之多对多关系
查看>>
System.ArgumentException: 另一个SqlParameterCollection中已包含SqlParameter。
查看>>
【1】自定义WindowsForm分页控件使用【共两篇】
查看>>
堆的插入删除
查看>>
期末大作业
查看>>
[转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
查看>>
123D
查看>>
你知道各调的特点吗?
查看>>