「题解」黑暗塔 wizard
本文将同步发布于:
题目
题意简述
给定 \(y\),求 \(\varphi(x)=y\) 中 \(x\) 的个数和最大值。
\(1\leq y\leq 10^{12}\)。
题解
欧拉函数
解决这个问题,就必然要知道欧拉函数的计算式是什么。
显然,欧拉函数的计算式子为:
\]
我们不难想到,若 \((p_i-1)\mid y\),那么 \(x\) 可能含有 \(p_i\) 这个质因数,我们直接搜索即可。
复杂度证明
冷静分析,我们不难发现,最劣情况下,一个数 \(y\) 满足 \(x\) 含有 \(p_i\),则 \((p_i-1)p_i\mid y\),因此本质不同的质因子个数最多有 \(11\) 个,我们参考反素数的贪心分析,不难写出搜索程序找到最劣情况,发现搜索状态数不多(数量级在 \(10^6\))。
时间复杂度得到了保证。
拓展阅读
个数:A014197。
最大值:A057635。
参考程序
#include<bits/stdc++.h>
using namespace std;
#define reg register
typedef long long ll;
bool st;
inline ll max(reg ll a,reg ll b){
return a>b?a:b;
}
const int S=1e6;
bool vis[S+1];
int tot,prime[S+1];
inline void Init(reg int n){
for(reg int i=2;i<=n;++i){
if(!vis[i])
prime[++tot]=i;
for(reg int j=1;j<=tot&&i*prime[j]<=n;++j){
vis[i*prime[j]]=true;
if(!(i%prime[j]))
break;
}
}
return;
}
inline bool isPrime(reg ll x){
if(x<=S)
return !vis[x];
else{
for(reg int i=1;i<=tot&&1ll*prime[i]*prime[i]<=x;++i)
if(!(x%prime[i]))
return false;
return true;
}
}
int cnt;
ll Max;
vector<ll> V;
inline void dfs(reg ll y,reg int p,reg ll pod){
if(y==1){
++cnt;
Max=max(Max,pod);
return;
}
if(y+1>V[p]&&isPrime(y+1))
++cnt,Max=max(Max,pod*(y+1));
for(reg int i=p+1,siz=V.size();i<siz&&1ll*(V[i]-1)*(V[i]-1)<=y;++i)
if(!(y%(V[i]-1))){
reg ll ny=y/(V[i]-1),npod=pod*V[i];
dfs(ny,i,npod);
while(!(ny%V[i]))
ny/=V[i],npod*=V[i],dfs(ny,i,npod);
}
return;
}
bool ed;
int main(void){
Init(S);
int t;
scanf("%d",&t);
while(t--){
ll y;
scanf("%lld",&y);
V.clear();
V.push_back(2);
for(reg int i=2;i<=tot;++i)
if(!(y%(prime[i]-1)))
V.push_back(prime[i]);
cnt=Max=0;
dfs(y,0,1),dfs(y,0,2);
reg ll bas=2;
while(!(y&1))
y>>=1,bas<<=1,dfs(y,0,bas);
printf("%d %lld\n",cnt,Max);
}
fprintf(stderr,"%.3lf s\n",1.0*clock()/CLOCKS_PER_SEC);
fprintf(stderr,"%.3lf MiB\n",(&ed-&st)/1048576.0);
return 0;
}
「题解」黑暗塔 wizard的更多相关文章
- 「SHOI2016」黑暗前的幻想乡 解题报告
「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱. 期间想过矩阵树定理, ...
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- 「题解」「HNOI2013」切糕
文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...
- 「CH6202」黑暗城堡
「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...
- 「题解」JOIOI 王国
「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...
- 「题解」:[loj2763][JOI2013]现代豪宅
问题 A: 现代豪宅 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...
- 【LOJ】#2027. 「SHOI2016」黑暗前的幻想乡
题解 我一开始写的最小表示法写的插头dp,愉快地TLE成60分 然后我觉得我就去看正解了! 发现是容斥 + 矩阵树定理 矩阵树定理对于有重边的图只要邻接矩阵的边数设置a[u][v]表示u,v之间有几条 ...
- 「题解」:$Six$
问题 A: Six 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...
- 「题解」:$Smooth$
问题 A: Smooth 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...
随机推荐
- Day003 数据类型拓展
数据类型拓展 整数拓展 进制 通常我们使用的都是10进制的整数,java中可以表示不同进制的整数 进制 表示方法 二进制 0b 八进制 0 十进制 默认 十六进制 0x 看看下面这个例子吧 int ...
- 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
碰到这个问题很多次,每次碰到都是去百度找.但是,不尽人意,好在最后还是解决了,所以写下总结. 报错内容: org.apache.catalina.core.StandardContext.startI ...
- 一种Maven项目启动时不编译java文件的解决方案
问题 前提介绍 : 环境版本 : JDK -version : 1.8.0-251 Tomcat -version : 8.5.5 Maven -version : 3.6.3 项目情况描述 使用ID ...
- mysql安装_图文详细安装步骤_让你轻松安装并使用(超详细步骤)
mysql的下载就不用说了,自行到官网下载..(本人下载的是mysql5.0版本) 下面开始正式安装 1.双击mysql_setup.exe后,直接点击Next 2.选择"I accept ...
- linux命令的使用 以及基本docker命令及docker镜像安装
以linux CentOS-7 64位 系统为例 查看ip ifconfig 固定ip 输入vim /etc/sysconfig/network-scripts/ifcfg-ens3 其中vim是修 ...
- Docker 部署net5程序
1.前言 本文讲述使用docker容器部署.net5项目.实现跨平台. 部署环境:docker 容器.liunx系统.这里采用VmWare虚拟机.并采用MobaXterm工具实现终端连接linux系统 ...
- Web安全之PHP反序列化漏洞
漏洞原理: 序列化可以将对象变成可以传输的字符串,方便数据保存传输,反序列化就是将字符串还原成对象.如果web应用没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被控制,就会造成代码执行, ...
- cms菜单栏二级折叠与交互解决方案(js)(1)
cms菜单栏二级解决方案(js) 在做一个cms系统的界面时,设计师并未指定二级菜单的交互,于是我就任意发挥,做了一个我自认为符合常规逻辑的方案 如下图 点击左上角收起按钮会收起 左侧菜单栏.中间栏左 ...
- [java] XML DTD XSD
XML是用来干什么的 https://bbs.csdn.net/topics/120762 https://blog.csdn.net/Rain722/article/details/52925828 ...
- 11.8 iotop:动态显示磁盘I/O统计信息
iotop命令是一款实时监控磁盘I/O的工具,但必须以root用户的身份运行.使用iotop命令可以很方便地查看每个进程使用磁盘I/O的情况. 最小化安装系统一般是没有这个命令的,需要使用yum命令额 ...