POJ NOI MATH-7647 余数相同问题
- 问题链接: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; }