uva 11889 Benefit(数学)
2014-11-22 22:05
155 查看
给出a,c,问是否存在一个尽可能小的数b使得lcm(a, b) == c
因为a*b/gcd(a, b) = lcm(a, b)
所以c/a = b/gcd(a, b)
而我们要求的是b,所以可以枚举b/gcd(a, b)的倍数直到c
这个过程中第一个满足条件的数就是b
代码如下:
因为a*b/gcd(a, b) = lcm(a, b)
所以c/a = b/gcd(a, b)
而我们要求的是b,所以可以枚举b/gcd(a, b)的倍数直到c
这个过程中第一个满足条件的数就是b
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } int main(void) { int T, a, c; scanf("%d", &T); while(T--) { scanf("%d%d", &a, &c); if(c%a != 0) { puts("NO SOLUTION"); } else { bool ok = false; for(int i=c/a; i<=c; i+=c/a) if(a/gcd(a, i)*i == c) { printf("%d\n", i); ok = true; break; } if(!ok) puts("NO SOLUTION"); } } return 0; }
相关文章推荐
- UVa 11889 Benefit (数学)
- UVA - 11889 Benefit(数学题)
- uva 11889 Benefit(简单数学)
- UVA 11889-Benefit(数学_快速枚举因子)
- [UVa 11889] Benefit (基础数论+GCD+LCM)
- uva 11889 Benefit
- UVA 11889 - Benefit(数论)
- UVA 11889 - Benefit
- UVa11889 Benefit
- UVa 11889 Benefit (数论)
- UVA 11889 - Benefit
- uva11889 - Benefit 数论
- UVA11889 Benefit
- UVA 11889 Benefit
- UVA 11889 - Benefit
- UVA 11889-Benefit
- UVA 11889 - Benefit
- UVa 11889 Benefit
- UVA11889 Benefit
- UVA - 11889 Benefit