「题解」黑暗塔 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个指针,将指针对应 ...
随机推荐
- tp5.1中返回当天、昨天、当月等的开始和结束时间戳
/** * 返回今日开始和结束的时间戳 * * @return array */function today(){ list($y, $m, $d) = explode('-', date('Y-m- ...
- php 获取某文件夹(比如共享文件夹)下图片并下载并压缩成zip
1.前端部分:直接请求 2.后端php //zip下载public function downZip(){ $pro_code = "test"; //zip名称 //获取列表 $ ...
- Getting Started and Beyond|云原生应用负载均衡选型指南
作者 冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作. 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理 ...
- 一种巧妙的使用 CSS 制作波浪效果的思路
在之前,我介绍过几种使用纯 CSS 实现波浪效果的方式,关于它们有两篇相关的文章: 纯 CSS 实现波浪效果! 巧用 CSS 实现酷炫的充电动画 本文将会再介绍另外一种使用 CSS 实现的波浪效果,思 ...
- Jenkins 基础篇 - 插件安装
这一小节主要介绍 Jenkins 插件的安装,登录到 Jenkins 后,依次进入到[系统管理]→ [插件管理]→ [可选插件],在这里可以看到所有的 Jenkins 插件,如下图: 我们在最开始安装 ...
- git合并代码到主分支
git合并login分支到master分支 1.首先查看源码状态 git status 2.添加到暂存区 git add . git status //添加到暂存区后再次查看源码状态 3.提交代码到本 ...
- 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端
nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...
- fedora21 桌面用户自动登录lightdm.conf -20190520 方法
修改 /etc/lightdm/lightdm.conf 步骤:1解除注释#autologin-user=root 2等号 =后面是root或者普通用户的用户名 例如:root用户自动登录 autol ...
- Scala 神奇的下划线 _
引言 在 Scala 中,下划线 _ 有很多种用法,作为 Scala 初学者也经常被下划线 _ 搞得晕头转向,下面是对 Scala 中下划线 _ 使用的简单总结~ 导包时, 下划线 _ 表示引用多个方 ...
- 使用Wok管理kvm虚拟机
[Centos7.4] !!!测试环境我们首关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# ...