您的位置:首页 > 其它

POJ NOI MATH-7647 余数相同问题

2017-03-31 22:54 274 查看
问题链接POJ NOI MATH-7647 余数相同问题

总时间限制: 1000ms内存限制: 65536kB描述
已知三个正整数 a,b,c。

现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。

请问满足上述条件的x的最小值是多少?

数据保证x有解。

输入一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。输出一个整数,即满足条件的x的最小值。样例输入
300 262 205

样例输出
19

来源《奥数典型题举一反三(小学六年级)》 (ISBN 978-7-5445-2883-2) 第一章 第一讲 例1

问题分析

  看似一个数论问题,没有想出好办法,只好用穷举法来解了。

程序说明

  (略)。

AC的C++语言程序之一:

#include <iostream>

using namespace std;

typedef long long LL;

const LL N = 1000000;

int main()
{
LL a, b, c;

cin >> a >> b >> c;

// a=|b-a|, b=|c-b|
a = b - a;
if(a < 0)
a = -a;
b = c - b;
if(b < 0)
b = -b;

// 计算a=|b-a|和b=|c-b|的最小公倍数
if(a % 2 == 0 && b % 2 == 0)
cout << 2 << endl;
else
for(LL i=3; i<=N; i+=2)
if(a % i == 0 && b % i == 0) {
cout << i << endl;
break;
}

return 0;
}


AC的C++语言程序之二:

#include <iostream>

using namespace std;

typedef long long LL;

const LL N = 1000000;

int main()
{
LL a, b, c;

cin >> a >> b >> c;

// a=|b-a|, b=|c-b|
a = b - a;
if(a < 0)
a = -a;
b = c - b;
if(b < 0)
b = -b;

// 计算a=|b-a|和b=|c-b|的最小公倍数
for(LL i=2; i<=N; i++)
if(a % i == 0 && b % i == 0) {
cout << i << endl;
break;
}

return 0;
}


AC的C++语言程序之三:

#include <iostream>

using namespace std;

typedef long long LL;

const LL N = 1000000;

int main()
{
LL a, b, c;
LL temp1, temp2, temp3;

cin >> a >> b >> c;
for(LL i=2; i<=N; i++) {
temp1 = a % i;
temp2 = b % i;
temp3 = c % i;
if(temp1 == temp2 && temp2 == temp3) {
cout << i << endl;
break;
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: