https://codeforces.com/contest/1152/problem/C

题意

a和b,找到k,使得lcm(a+k,b+k)最小(a,b:1e9)

题解

  • 设gcd=gcd(a+k,b+k)且\(a<b\),即(a+k)%gcd=0,(b+k)%gcd=0,(a+k)%gcd=(b+k)%gcd,a%gcd=b%gcd
  • 移项得b%gcd-a%gcd=0,(b-a)%gcd=0
  • 枚举b-a的因数即gcd,维护最小值

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,ans,ansk,k,tp,x;
int main(){
scanf("%lld%lld",&a,&b);
if(a>b)swap(a,b);
ans=a/__gcd(a,b)*b;
ansk=0;
for(ll i=1;i*i<=(b-a);i++){
//cout<<i<<endl;
if((b-a)%i)continue;
x=i;
if(a%x!=b%x)continue;
if(a%x){
k=x-a%x;
tp=(a+k)/__gcd(a+k,b+k)*(b+k);
if(tp<ans){
ans=tp;ansk=k;
}else if(tp==ans&&k<ansk){
ansk=k;
}
}
x=(b-a)/i;
if(a%x!=b%x)continue;
if(a%x){
k=x-a%x;
tp=(a+k)/__gcd(a+k,b+k)*(b+k);
if(tp<ans){
ans=tp;ansk=k;
}else if(tp==ans&&k<ansk){
ansk=k;
}
} }
printf("%lld",ansk);
}

最新文章

  1. 引水入城(codevs 1066)
  2. ci总结
  3. js 事件函数中的参数带换行符或换行标签都不能起作用的解决方法
  4. 由浅入深了解Thrift之结果封装
  5. 【学习】Windows PE文件学习(一:导出表)
  6. BNU 51276 - 道路修建 Small (并查集)
  7. JAVA泛型编程笔记
  8. class 类(2)
  9. c#超时锁定
  10. js原生设计模式——2面向对象编程之闭包2
  11. 程序员的自我救赎---11.4:FileSystem文件服务
  12. sqlserver数据库不能重命名报错5030——我的一点小思考
  13. java课程之团队开发冲刺1.2
  14. libreoffice python 操作word及excel文档
  15. android 控件获取 获取焦点
  16. laravel创建新的提交数据
  17. EXCEL workbook.saveas 函数详解
  18. 星号三角形 I python
  19. Windows Service 之 Bug 记录
  20. 【Unity】4.7 摄像机

热门文章

  1. 如何在AbpNext项目中使用Mysql数据库
  2. WPF 精修篇 窗体唯一(Single) 显示在最前
  3. C语言的指针用法:输入一堆字符,把非字母的删去。
  4. 初学者用js做的计算题
  5. Hbase内存磁盘大致关系
  6. JDBC进阶 元数据
  7. Apollo的基本概念和集成实战
  8. SpringBoot开发案例之mail中文附件名字乱码
  9. SpringBoot(14)—注解装配Bean
  10. 这篇文章带你彻底理解synchronized