uva 11889 Benefit(数学)

来源:互联网 发布:创业软件股吧 编辑:程序博客网 时间:2024/06/08 06:55

给出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

代码如下:

#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;}


0 0
原创粉丝点击