LGP7847题解
题意:给定 \(n\),求方程 \(\frac 1 a - \frac 1 b=\frac 1 n\) 的所有解,且解必须满足 \(\gcd(a,b,n)=1\)。
以下内容搬运自官方题解:
转化一下:
\]
\]
根据 \(\gcd(a,b,n)=1\),有:
\]
接下来设 \(b=x \times \gcd(b,n),n=y \times \gcd(b,n)\),那么一定有 \(\gcd(x,y)=1\)。
于是:
\]
\]
而 \(\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\),枚举可行的 \(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题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- Android利用zxing生成二维码
感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...
- Java线程--Callable使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871727.html Java线程--Callable使用 Callable和Runnabl ...
- shell基础——数组
定义数组 #小括号,空格 arr=(v1 v2 v3) arr=(`ls`) 打印数组 echo ${arr[0]} #下标从0开始 echo ${arr[*]} #整个数组 echo ${arr[@ ...
- notepad++颜色属性解释
Global Styles Indent guideline style 缩进参考线的颜色Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{} js中的() ...
- Pytest介绍
Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍,它 ...
- Linux专项之Apache
day01:apache服务框架 前期准备 1.虚拟机上网 实验一:展示默认页面 1.安装软件(httpd) yum search httpd yum install -y httpd 2.关闭防火墙 ...
- HTTP流量神器Goreplay核心源码详解
摘要:Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写. 本文分享自华为云社区<流量回放工具之 goreplay 核心源码分析> ...
- JVM调优——JVM监控工具jvisualvm的使用及GC插件安装
一.前言 在高并发的场景下,我们网站的的访问性能会降低,我们怎么优化,这是个问题!天天听JVM调优,实际上还是不知道怎么调优,调优也是看着网上说的修改一下JVM的堆的空间等等进行的.实际上我们应该在压 ...
- spring循环依赖的产生与解决
1.循环依赖的产生 在spring中对象默认都是单例的 ,意味整个容器中只有一个该类的对象. 如图,B类有一个属性a,A类有一个属性b.当B类创建对象时,要给a属性赋值:当A类创建对象时,要给b属性赋 ...
- mysql linux 导出数据
1.mysql -hxx -uxx -pxx -e 'select "" name from a' db数据库 > file 2.导出的文件notepad++打开 3.新建e ...