SEERC15 求一个正整数n,使得a+n和b+n的LCM值最小
2015-12-08 15:46
357 查看
http://codeforces.com/gym/100818 有一个坑点:国外的自然数居然是不包括0的!!!
#include<bits/stdc++.h>
using namespace std;
vector <long long> v;
long long gcd(long long x, long long y)
{
if (y == 0)
return x;
return gcd(y, x%y);
}
int main()
{
// freopen("111.txt","r",stdin);
long long a, b,tt=-1;
while (cin >> a >> b)
{
if (a > b)
swap(a, b);
v.clear();
if (a == b)
{
cout << 1 << endl;
continue;
}
long long n = b - a; //不管怎么加,两个数的差值是固定的,所以有用?
for (long long i = 1; i*i <= n; ++i)
{
if (n%i == 0)
{
v.push_back(i); //存放所有约数
v.push_back(n/i);//存放所有约数
}
}
long long ans = 2000000000000000005; //这个数要比10^18大一点(因为n肯定大于0,所以最终的两个数可能会大于10^9,陷阱啊)
long long minn = 200000000000;
for (int i = 0; i < v.size(); ++i)
{
long long x = (v[i] - a%v[i]); //靠猜/凑的? x是最后n的可能值
long long y = gcd(a + x, b + x);
if (((x + a) / y)*(b + x) < ans)
{
ans = ((x + a) / y)*(b + x);
minn = x;
}
else if (((x + a) / y)*(b + x) == ans&& x<minn)
{
minn=x;
}
}
cout <<minn << endl;
}
return 0;
}
相关文章推荐
- 当Cacti出现snmp error时
- C语言中的动态内存分配
- 利用FileReader实现图片预览
- static用在函数里面,声明一次变量后,如果再次调用这个函数将会在初始值延续,如$num这里将累加。
- CAP与最终一致性(转载)
- 将jar要么aar公布到到网mvn 在(使用github作为仓库), 通过gradle dependency 信息集成
- [前端测试]关于JS判断id的一个Bug
- Qtopia-2.2.2在x86平台编译--错误修改总汇
- Springmvc构造RESTful详细讲解
- 事件传递之响应链(Event Delivery: The Responder Chain)【转】
- 论文笔记1《基于ID3决策树改进算法的客户流失预测分析》
- [LeetCode]Gray Code
- android——ObjectAnimator动画(一)
- ubuntu开机自动登陆
- java实现自动发邮件并携带附件
- EditText属性大全
- 一招制敌 - 玩转 AngularJS 指令的 Scope (作用域)
- mybatis foreach
- Minimum Depth of Binary Tree
- Python3.4 邮件(包含附件与中国)