题目链接:https://codeforces.com/contest/1152/problem/C

题目大意:给定两个正整数a,b,其中(1<=a,b<=1e9),求一个正整数k(0<=k),使得a+k与b+k的最小公倍数最小。

解题思路:首先我们需要知道gcd(a,b)=gcd(a,b-a)=gcd(b,b-a)(b>a)的

我们要求的是lcm(a+k,b+k)=(a+k)(b+k)/gcd(a+k,b+k)=(a+k)(b+k)/gcd(a+k,b-a)

因为b-a是定值,所以我们可以枚举每个b-a的约数设为x,然后我们计算出最小的k使得(a+k)%x==0,然后计算他们的最小公倍数,如果大于我们的当前最小公倍数就更新。

代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;
const int mod=1e9+;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
const int maxn=2e5+;
vector<ll> yinzi;
int main(){
ll a,b;
cin>>a>>b;
if(a>b)swap(a,b);
if(a==b||b%a==||b-a==){
cout<<<<endl;
return ;
}
int cha=b-a;
for(int i=;i*i<=cha;i++){ //计算b-a的所有因子
if(cha%i==){
yinzi.push_back(i);
if(i*i!=cha) yinzi.push_back(cha/i);
}
}
ll ans=lcm(a,b),x=;
for(int i=;i<yinzi.size();i++){
int k=;
if(a%yinzi[i]) k=yinzi[i]-a%yinzi[i];
if(k>=){
ll tmp=(a+k)/yinzi[i]*(b+k);
if(tmp==ans&&k<x) x=k;
if(tmp<ans){
ans=tmp;
x=k;
}
}
}
cout<<x<<endl;
return ;
}

Codeforces Round #554 (Div. 2) C.Neko does Maths (gcd的运用)的更多相关文章

  1. Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)

    题目:http://codeforces.com/contest/1152/problem/C 题意:给你a,b, 你可以找任意一个k     算出a+k,b+k的最小公倍数,让最小公倍数尽量小,求出 ...

  2. Codeforces Round #554 (Div. 2) C. Neko does Maths(数学+GCD)

    传送门 题意: 给出两个整数a,b: 求解使得LCM(a+k,b+k)最小的k,如果有多个k使得LCM()最小,输出最小的k: 思路: 刚开始推了好半天公式,一顿xjb乱操作: 后来,看了一下题解,看 ...

  3. Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))

    传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...

  4. Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform

    学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152B. Neko Performs Cat Furrier Transform 题目链接:"ht ...

  5. Codeforces Round #554 (Div. 2) 1152A - Neko Finds Grapes

    学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152A - Neko Finds Grapes 题目链接:"https://codeforces. ...

  6. Codeforces Round #554 (Div. 2) B. Neko Performs Cat Furrier Transform(思维题+log2求解二进制位数的小技巧)

    传送门 题意: 给出一个数x,有两个操作: ①:x ^= 2k-1; ②:x++; 每次操作都是从①开始,紧接着是② ①②操作循环进行,问经过多少步操作后,x可以变为2p-1的格式? 最多操作40次, ...

  7. Codeforces Round #554 (Div. 2) E Neko and Flashback (欧拉路径 邻接表实现(当前弧优化..))

    就是一欧拉路径 贴出邻接表欧拉路径 CODE #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; ...

  8. Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)

    题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...

  9. Codeforce Round #554 Div.2 C - Neko does Maths

    数论 gcd 看到这个题其实知道应该是和(a+k)(b+k)/gcd(a+k,b+k)有关,但是之后推了半天,思路全无. 然而..有一个引理: gcd(a, b) = gcd(a, b - a) = ...

随机推荐

  1. 170817关于AJAX的知识点

    1.AJAX                  [1] AJAX简介                        全称: Asynchronous JavaScript And XML        ...

  2. VS2015发布web服务

    一.IIS中 ①添加网站 二.VS2015 ①右键解决方案→发布: ②自定义,设置配置文件名称: ③ ④发布     三.IIS中浏览(图片的ip地址是自己,上面的ip是截图别人的,所以不一样)

  3. Packet Tracer基本使用

    Cisco Packet Tracer基本使用 1:添加设备:路由器选择1841,交换机选择2960二层交换机,添加PC.服务器Server(End Devices) 2:添加连接:这里指以太网连接, ...

  4. noi.ac #712 练级

    分析 把船当作点 练级当作边 发现一个连通块大于n-1的边的条数的奇偶性影响这个连通块的答案 于是并查集维护即可 代码 #include<bits/stdc++.h> using name ...

  5. 线段树2(P3373)

    传送 感谢洛谷题解让我理清了这一撮标记 这里多了一个乘法操作,乘法的优先级高于加法.我们来思考一下有关标记的问题. 首先由两种操作,可以想到要有两个标记,一个标记乘法(mul[k]),一个标记加法(a ...

  6. 【SpringBoot】 Java中如何封装Http请求,以及JSON多层嵌套解析

    前言 本文中的内容其实严格来说不算springboot里面的特性,属于JAVA基础,只是我在项目中遇到了,特归纳总结一下. HTTP请求封装 目前JAVA对于HTTP封装主要有三种方式: 1. JAV ...

  7. java反射机制-简单实例

    public class Car { private String brand; private String color; private int maxSpeed; public Car() { ...

  8. DEDECMS为文章添加NEW标志图片

    找到extend.func.php添加自定义函数: function shownewimg($pubtime){$ntime = time();$tagtime = $pubtime;$day3 = ...

  9. 使EasyUI的window、panel、dialog 不被拖出页面

    function easyuiPanelOnMove(left, top) {  var l = left;  var t = top;  if (l < 1) {    l = 1;  }  ...

  10. mysql中插入中文时显示乱码

    在插入mysql的时候参数是中文的时候显示的是???乱码,这个是由于没有配置字符编码引起的 只要在SqlMapconfig.xml文件中加上<property name="url&qu ...