题意:给定 \(n\),求方程 \(\frac 1 a - \frac 1 b=\frac 1 n\) 的所有解,且解必须满足 \(\gcd(a,b,n)=1\)。

以下内容搬运自官方题解:

转化一下:

\[bn=a(b+n)
\]
\[a=\frac {bn} {b+n}
\]

根据 \(\gcd(a,b,n)=1\),有:

\[\gcd(\frac {bn} {b+n},b,n)=\gcd(\frac {bn} {b+n},\gcd(b,n))=1
\]

接下来设 \(b=x \times \gcd(b,n),n=y \times \gcd(b,n)\),那么一定有 \(\gcd(x,y)=1\)。

于是:

\[\gcd(\frac {xy} {x+y} \times \gcd(b,n),\gcd(b,n))=1
\]
\[\gcd(b,n)|(x+y)
\]

而 \(\gcd(xy,x+y)=1,\frac {xy} {x+y} \times \gcd(b,n)\) 是整数,所以有 \((x+y)|\gcd(b,n)\)。

于是 \(x+y=\gcd(b,n),b+n=\gcd(b,n) \times (x+y) = \gcd(b,n)^2\)。

相当于求方程 \(x+n=\gcd(x,n)\)。(这里的 \(x\) 在上面是 \(b\))

下面为了方便,设 \(\gcd(x,n)=d,c=dk\)。

\[d^2=dk+x
\]
\[x=d \times (d-k)
\]

然后对于 \(d\),枚举可行的 \(k\),最后检查一下是否合法就行。

以上内容搬运自官方题解。

检查是否合法的瓶颈在于,计算 \(\gcd(x,c)=\gcd(d(d-k),c)=\gcd(d(d-k),dk)=d \times \gcd(d-k,k)\)。

这里的 \(d-k\) 和 \(k\) 一定有一个数不大于 \(\sqrt n\),所以根据 \(\gcd(a,b)=\gcd(a \bmod b,b)\),可以直接预处理一个 \(\sqrt n \times \sqrt n\) 的表。

再往下推,发现实际上是判断 \(d\times \gcd(d-k,k)=d\),也就是判断 \(d\) 和 \(k\) 是否互质,所以打表可以使用一个 bool 类型的数组来降低常数。

到这里,复杂度已经变成 \(O(n\log n+T)\) 的了。在加强版中,这个做法只跑了 1s,并且卡掉了 \(O(n+T\sqrt n)\) 的暴力,还在原版跑到了300ms。

#include<cstdio>
#include<vector>
typedef unsigned uint;
typedef unsigned long long ull;
const uint M=2e6;
uint T,mx,n[100005],ans1[M+5];bool _check[1420][1420];
ull ans[M+5],ans2[M+5];
inline ull min(const ull&a,const ull&b){
return a>b?b:a;
}
signed main(){
register uint i,j,x;
scanf("%u",&T);_check[0][1]=true;
for(i=1;i<=1415;++i)_check[1][i]=true;
for(i=2;i<=1415;++i){
for(x=0,j=i;j<=1415;++j){
_check[i][j]=_check[x][i];
if(++x==i)x=0;
}
}
for(i=1;i<=T;++i)scanf("%u",n+i),mx=n[i]>mx?n[i]:mx;
for(i=1;i<=mx;++i)ans2[i]=0x7f7f7f7f7f7f7f7f;
for(i=1;i<=mx;++i){
for(j=1,x=i;j<=i&&x<=mx;++j,x+=i){
if(_check[i%j][j])ans2[x]=min(ans2[x],1ull*i*(i-j)),++ans1[x];
}
}
for(ans1[i=1]=0;i<=mx;++i)ans1[i]+=ans1[i-1];
for(i=1;i<=T;++i)printf(n[i]==1?"0\n":"%u %llu\n",ans1[n[i]],ans2[n[i]]);
}

LGP7847题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 消息队列 - mac上安装RabbitMq (转)

    什么是RabbitMQ? RabbitMQ是由Erlang语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也称为面向消息的中间件).支持WIndows.Linux.MAC OS 操作系 ...

  2. linux计划任务之cron

    目录 cron计划任务之用户级 cron计划任务之系统级 cron计划任务之用户级 1.安装crond centos7 执行命令: # yum install -y crontabs /bin/sys ...

  3. Token+Redis实现接口幂等性

    一.什么是 幂等性 在编程中,幂等性的特点就是其任意多次执行的效果和一次执行的效果所产生的影响是一样的. 二.Token+Redis的实现思路 1.数据提交前要向服务的申请 token(用户登录时可以 ...

  4. [转]API性能测试基本性能指标及要求

    原文链接http://blog.csdn.net/strawbingo/article/details/46458959 指标的基本概念 1.事务(Transaction) 在web性能测试中,一个事 ...

  5. AI模型运维——NVIDIA驱动、cuda、cudnn、nccl安装

    目前大部分使用GPU的AI模型,都使用的英伟达这套. 需要注意的是,驱动.cuda.cudnn版本需要一一对应,高低版本互不兼容. 驱动和cuda对应关系:https://docs.nvidia.co ...

  6. js reduce累加器

    ​ reduce 是es6 新增的数组操作方法 意为累加器 使用方法如下 [1,1,1,1].reduce((total,currentValue,index)=>{ },initialValu ...

  7. Swagger2简单实用

    前后端分离很好用的api <!--swagger--> <dependency> <groupId>io.springfox</groupId> < ...

  8. Go Exec 僵尸与孤儿进程

    原文地址:Go Exec 僵尸与孤儿进程 最近,使用 golang 去管理本地应用的生命周期,期间有几个有趣的点,今天就一起看下. 场景一 我们来看看下面两个脚本会产生什么问题: 创建两个 shell ...

  9. kali linux 中python2不带pip的解决方法

    在使用kali2020版本时,发现pip只能安装python3的模块,没办法安装python2模块,但是我有需要用到python2来运行脚本,在此贴出解决办法 https://bootstrap.py ...

  10. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    [系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...