题意:给定 \(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. ORA-22922:nonexistent LOB value问题及listagg()函数

    1 现象及错误信息 在执行一次查询的过程,Oracle出现ORA-22922:nonexistent LOB value 的错误:根据提示,是在查询时没有找到lob对象: 2 问题分析 查看SQL,发 ...

  2. 手动加载nacos自定义配置到全局变量中

    由于springboot启动顺序:先加载上下文再加载bean 开始日常搬砖: 1.通过启动日志发现nacos在PropertySourceBootstrapConfiguration中加载上下文配置: ...

  3. java-数据库操作(JDBC)

    前言:JDBC用到的API和常用方法 DriverMannager类 加载驱动并创建与数据库的连接,通常使用Class类的静态方法forName()来实现加载驱动,使用getConnection(St ...

  4. 生成一个node项目

    生成一个node项目1.创建文件夹2.文件夹中右键->在此处打开命令窗口->文件夹中打开dos3.执行:npm init //一路回车,最后y4.安装插件: C:\www\nodejs\h ...

  5. 手把手教你实现pynq-z2条形码识别

    我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计. 关注公众号,拉你进"IC设计交流群". 1.前言 单单实现一个二维码识别就花了将近一个星期,这篇文章我就 ...

  6. 05网络并发 ( GIL+进程池与线程池+协程+IO模型 )

    目录 05 网络并发 05 网络并发

  7. Blob检测

    一 Laplace 算子 使用一阶微分算子可以检测图像边缘.对于剧烈变化的图像边缘,一阶微分效果比较理想.但对于缓慢变化的图像边缘,通过对二阶微分并寻找过零点可以很精确的定位边缘中心.二阶微分即为 L ...

  8. 暑假撸系统6- Thymeleaf ajax交互!

    本来用Thymeleaf也没想着深度使用ajax,就是用也是非常传统的ajax方式提交然后js控制修改下变量.闲来无事的时候看Thymeleaf的教程发现一哥们的实现方式,以及实现思路,堪称惊奇,先说 ...

  9. GIT学习——天天都在用Git,那么你系统学习过吗?(学习过程)

    你系统学习Git了吗? 学习圣思园张龙老师的Git课程. 使用Mac编程的好处,不是因为Mac长得好看 Git内容学习准备 如果你还没有用Git,就不要写代码了. GitHub仓库的使用. 新员工入职 ...

  10. blender获取任意位置建筑白模

    在前端3d可视化开发过程中有时会需要到白模,特别是gis开发,可能会用到各个城市的白模,其实可以使用Blender配合BlenderGis插件来提取osm中的白模.具体步骤如下: 安装软件 在此处下载 ...