C - Neko does Maths 数论
求使得lcm(a+k,b+k)最小的时候的最小k。
根据同余定理。
a%c==0 b%c == 0 --》(a-b)%c ==0
所以gcd(a,b)=gcd(a,fabs(b-a))
这个题目中 b-a是固定的,所以gcd(a+k,b+K)的值就在于a+k与b-a的关系。
我们知道,如果a+k有b-a的因数那么gcd就能变得更小。
基于这个,我们遍历所有b-a的因数,来寻找是的lcm最小的时候的最小k。
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<stack>
#include<vector>
#include<queue>
#include<set>
#include<map>
//#include<regex>
#include<cstdio>
#define up(i,a,b) for(int i=a;i<b;i++)
#define dw(i,a,b) for(int i=a;i>b;i--)
#define upd(i,a,b) for(int i=a;i<=b;i++)
#define dwd(i,a,b) for(int i=a;i>=b;i--)
//#define local
typedef long long ll;
const double esp = 1e-6;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int inf = 1e9;
using namespace std;
int read()
{char ch = getchar(); int x = 0, f = 1;while (ch<'0' || ch>'9') { if (ch == '-')f = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }return x * f;
}
typedef pair<int, int> pir;
ll a, b;
ll dist;
ll ans = 0;
ll sum = 1e15;
ll gcd(ll a, ll b)
{return b == 0 ? a : gcd(b, a%b);
}
int main()
{cin >> a >> b;if (a > b)swap(a, b);//a大b小if (b%a == 0) { cout << 0 << endl; return 0; }//是倍数的时候就不需要判断了dist = b - a;//距离if (dist < a)//距离比a小,那么a肯定能化成dist的倍数,此时gcd=dist肯定是最小的{cout << (dist - a % dist) % dist << endl;//再模一下就能保证输出再0-dist-1return 0;}else{for (int i = 1; i*i <= dist; i++){if (dist%i == 0)//如果是因数{ll temp = i - (a%i);//算k值ll sumtemp = (a + temp)*(b + temp) / gcd(a + temp, b + temp);if (sumtemp == sum){if (temp < ans)ans = temp;}if (sumtemp < sum){sum = sumtemp;ans = temp;}temp = dist / i - (a % (dist / i));//判断dist/i的大小sumtemp = (a + temp)*(b + temp) / gcd(a + temp, b + temp);if (sumtemp == sum)if (temp < ans)ans = temp;if (sumtemp < sum)sum = sumtemp, ans = temp;}}cout << ans << endl;}return 0;
}
不过看别人的代码发现有更简单的方法,虽然思路差不多,不过我看大佬连gcd都没有用上。
大概就是
ans=min(ans,i-a)
ans=min(ans,dist/i-a)。。没太明白为什么这样就一定能满足
C - Neko does Maths 数论相关推荐
- CF1152C Neko does Maths
题目传送门 CF1152C Neko does Maths 题目描述 Neko loves divisors. During the latest number theory lesson, he g ...
- 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: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...
- 【CodeForces - 1152C 】Neko does Maths(数学数论,lcm,gcd性质)
题干: 给出a,b<=1e9,你要找到最小的k使得lcm(a+k,b+k)尽可能小,如果有多个k给出同样的最小公倍数,输出最小的一个k. 解题报告: 因为题目中k太多了,先化简一下公式,假设a& ...
- C. Neko does Maths
contents: 题 题意 思路 AC代码 题 Neko loves divisors. During the latest number theory lesson, he got an inte ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)
题目:http://codeforces.com/contest/1152/problem/C 题意:给你a,b, 你可以找任意一个k 算出a+k,b+k的最小公倍数,让最小公倍数尽量小,求出 ...
- Neko does Maths
https://codeforces.com/contest/1152/problem/C 题解: 扩展欧几得里定理 /* *@Author: STZG *@Language: C++ */ #inc ...
- 数论(一)——素数,GCD,LCM
这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...
- 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工
近期学了学数论,来写一波总结吧. (1)排列组合,比较基础的东西了吧.//只写个概念吧,(逃: 概念:就是从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合: ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
最新文章
- jdbc connection为什么放在webINF的lib里面
- 插入,冒泡,选择,快速排序,二分查找
- mysql,int(5)、int(10)啥区别联系
- APM - Javassist 入门 生成一个简单类
- 2.1 《数据库系统概论》关系数据结构及形式化定义(关系、关系模式、关系数据库)
- Azkaban安装部署,配置文件配置,启动等
- python函数参数列表中的*与**
- 怎么改变github的用户名字,身份?
- eclipse控制台自动换行不分割单词_这 7 个实用的文档技巧,不掌握就太可惜了...
- ClickHouse 详细集群部署方案
- 第5章 Python 数字图像处理(DIP) - 图像复原与重建14 - 逆滤波
- java web 刷新_Java Web项目的保存和刷新
- 你不懂js系列学习笔记-类型与文法- 02
- oracle当查询没有输出返回0,ORACLE技术问题专家问答五则
- 【JAVA SE】第十五章 ArrayList、LinkedList、HashMap和HashSet
- 直接访问WEB-INF目录下的JSP页面的方法
- 拯救安卓手机的数据(无法进入系统只能打开recovery)
- HOOK NtCreateSection
- 芯片AD库导入(贸泽)
- 自动轮播图html css js代码,js轮播(自动轮播图html代码)