HDU 2504 GCD
2017-01-13 20:13
381 查看
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2504
题解:本来暴力就可以解决,我却一直在找好的方法,我想了又想,既然要求最小的,那么辗转相除只进行了一次结束,所以我编了代码2,但是wa,至今不知道为什么错。
暴力的代码就是一个一个试。
没有优化的代码:
#include<iostream>
using namespace std;
const int maxn = 1000000 + 5;
int gcd(int n, int m) {
return n%m ? gcd(m, n%m) : m;
}
int main() {
int num;
cin >> num;
while (num--) {
int n, m;
while (cin >> n >> m) {
int result;
for (int i = m + 1;i < maxn;i++) {
if (i == n) continue;
else if (i < n&&gcd(n, i) == m) {
result = i;
break;
}
else if (i > n&&gcd(i, n) == m) {
result = i;
break;
}
}
cout << result << endl;
}
}
}优化以后减少遍历的次数,因为肯定是最大公约数倍数,所以可以做点文章:
#include<iostream>
using namespace std;
const int maxn = 1000000 + 5;
int gcd(int n, int m) {
return n%m ? gcd(m, n%m) : m;
}
int main() {
int num;
cin >> num;
while (num--) {
int n, m;
while (cin >> n >> m) {
int result;
for (int i = m + m;;i+=m) {
if (i == n) continue;
else if (i < n&&gcd(n, i) == m) {
result = i;
break;
}
else if (i > n&&gcd(i, n) == m) {
result = i;
break;
}
}
cout << result << endl;
}
}
}
WA代码(知道为什么错了,请告知我,谢谢):
#include<iostream>
using namespace std;
const int maxn = 1000000 + 5;
int gcd(int n, int m) {
return n%m ? gcd(m, n%m) : m;
}
int main() {
int num;
cin >> num;
while (num--) {
int n, m;
while (cin >> n >> m) {
int result;
for (int i = 2;;i++) {
int temp = m*i;
if (n%temp == m || temp%n == m) {
result = temp;
break;
}
}
cout << result << endl;
}
}
}
题解:本来暴力就可以解决,我却一直在找好的方法,我想了又想,既然要求最小的,那么辗转相除只进行了一次结束,所以我编了代码2,但是wa,至今不知道为什么错。
暴力的代码就是一个一个试。
没有优化的代码:
#include<iostream>
using namespace std;
const int maxn = 1000000 + 5;
int gcd(int n, int m) {
return n%m ? gcd(m, n%m) : m;
}
int main() {
int num;
cin >> num;
while (num--) {
int n, m;
while (cin >> n >> m) {
int result;
for (int i = m + 1;i < maxn;i++) {
if (i == n) continue;
else if (i < n&&gcd(n, i) == m) {
result = i;
break;
}
else if (i > n&&gcd(i, n) == m) {
result = i;
break;
}
}
cout << result << endl;
}
}
}优化以后减少遍历的次数,因为肯定是最大公约数倍数,所以可以做点文章:
#include<iostream>
using namespace std;
const int maxn = 1000000 + 5;
int gcd(int n, int m) {
return n%m ? gcd(m, n%m) : m;
}
int main() {
int num;
cin >> num;
while (num--) {
int n, m;
while (cin >> n >> m) {
int result;
for (int i = m + m;;i+=m) {
if (i == n) continue;
else if (i < n&&gcd(n, i) == m) {
result = i;
break;
}
else if (i > n&&gcd(i, n) == m) {
result = i;
break;
}
}
cout << result << endl;
}
}
}
WA代码(知道为什么错了,请告知我,谢谢):
#include<iostream>
using namespace std;
const int maxn = 1000000 + 5;
int gcd(int n, int m) {
return n%m ? gcd(m, n%m) : m;
}
int main() {
int num;
cin >> num;
while (num--) {
int n, m;
while (cin >> n >> m) {
int result;
for (int i = 2;;i++) {
int temp = m*i;
if (n%temp == m || temp%n == m) {
result = temp;
break;
}
}
cout << result << endl;
}
}
}
相关文章推荐
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- HDOJ(HDU) 2504 又见GCD(利用最大公约数反推)
- HDU 2504 又见GCD
- HDU 2504 又见GCD
- 又见GCD (HDU 2504)
- HDU 2504 又见GCD【数学+暴力】
- 又见GCD HDU - 2504
- GCD & 拓展GCD 入门——HDU - 2504,UVA - 10673
- HDU 2504 又见GCD
- HDU 2504 又见GCD
- 杭电ACM--HDU-2053a/b+c/d和HDU-2504又见gcd
- 【hdu 2504】又见GCD
- HDU 2504 又见GCD【GCD】
- HDU 2504 又见GCD
- HDU 2504 又见GCD(水~)
- HDU 2504 又见GCD
- 【hdu 2504】又见GCD(数学相关)
- hdu 2504 又见GCD
- hdu-2504-又见GCD
- HDU 2504 又见GCD