UVA11889 - Benefit

题目链接

题意:输入两个整数A和C,求最小的整数B使得lcm(A, B) = C,如果无解,输出“NO SULUTION”。

思路:lcm(A, B) * gcd(A, B) = A * B转化为C / A = B / gcd(A, B),所以可以枚举B的倍数。

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

int a, c;

int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

int main() {
    int cas;
    scanf("%d", &cas);
    while (cas--) {
        scanf("%d%d", &a, &c);
        if (c % a != 0) {
            printf("NO SOLUTION\n");
        }
        else {
            int b = c / a;
            int flag = 0;
            for (int i = b; i <= c; i += b) {
                if (b == i / gcd(i, a)) {
                    printf("%d\n", i);
                    break;
                }
            }
        }
    }
    return 0;
}

时间: 2024-10-22 13:27:17

UVA11889 - Benefit的相关文章

《算法竞赛入门经典——训练指南》第二章题库

UVa特别题库 UVa网站专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=442 注意,下面注有"extra"的习题并没有在书中出现,但在上面的特别题库中有,属于附加习题. 基础练习 (Basic Problems) UVa11388 GCD LCM UVa11889 Benefit UVa10943 How do y

UVA 11889 Benefit

11889 Benefit 题意: 给出T(T ≤ 100000)组数据:每组数据中给出A,C (1 ≤ A, C ≤ 10e7):已知LCM(A,B)=C,求最小的B 如果无解的话,输出 NO SOLUTION 思路: 比较难懂,可以多思考几遍.首先b=c/a;如果b不是int;直接无解:然后循环(对A和B求GCD的一值,再A/=值)直到那个值为1: 反例:12 16 48,顺便借这个例子分析一下:b=c/a=48/12=4,12和4的LCM是12不是48因为他们的有GCD影响,然后GCD的那

Uva 11889 - Benefit( 数论 )

Uva 11889 - Benefit( 数论 ) 题意: calculate the lowest integer B such that LCM(A, B) = C 分析: LCM(A,B) = C = A*B/GCD(A,B)C*GCD(A,B) = A*BC/A = B/GCD(A,B)如果C%A != 0 无解否则, 令t = C/AB = t * GCD(A,B) 即B 一定是 t 的整数倍从t开始枚举B #include <cstdio> typedef long long LL

STUCTS LABLE ‘S BENEFIT

{LJ?Dragon}[注]Struts标签的三个好处 RELATED LINKS 0.UTF-8 有无BOM的区别 UTF-8 BOM 06. 几款网页数据抓取软件 SOFTWARE_INTRODUCE 1.修改记事本编码默认 CHANGE NOTEPAD (UTF-8) 07.EasyUEFI简介 EasyUEFI 2.CAD安装问题 CAD INSTALL PROBLEMS 08. Windows Live Writer WLW Install Faied 3.几款好用的播放器 Media

UVa 11889 (GCD) Benefit

好吧,被大白书上的入门题给卡了.=_=|| 已知LCM(A, B) = C,已知A和C,求最小的B 一开始我想当然地以为B = C / A,后来发现这时候的B不一定满足gcd(A, B) = 1 A要不断地除去gcd(A, B),直到满足gcd(A, B) = 1 B最后就应该乘上A除去的值 1 #include <cstdio> 2 3 typedef long long LL; 4 5 LL gcd(LL a, LL b) 6 { return b == 0 ? a : gcd(b, a%

Uva 11889 Benefit (lcm与gcd)

题意:给你两个数,a,c,求出 lcm(a,b)==c 时的 b 的最小值 思路:我们知道一个性质 gcd(a,b)*lcm(a,b) = a*b 由此我们可以得到 b = gcd(a,b)*lcm(a,b)/a 那我们可以先用 lcm(a,b)/a 计算出假定的b值 如果 gcd(a.b)==1 那么b的最小值确定 如果 gcd(a,b)!=1 我们就要通过计算来找到 计算方法为 a=a/gcd(a,b) b=b*gcd(a.b) 样例: 4 6 12 2 6 32 1760 7 16 结果:

最小公倍数 UVa11889

1.题目描述:点击打开链接 2.解题思路:本题要求寻找最小的B,使得lcm(A,B)=C.这里容易想当然地认为B=C/A就是答案.实际上是错误的做法.因为lcm(A,C/A)不一定等于C,如果想让lcm(A,C/A)==C,必须有gcd(A,C/A)==1.通过恒等式a*b==gcd(a,b)*lcm(a,b)即可证明.这就提示我们得到临时的B之后,要想办法将A,B变为互素的两个数.还是利用恒等式,我们可以事先求出d=gcd(A,B),只需要B*=d,同时将A/=d.即可消去两者公共的倍数,同时

题解 UVa11889

题目大意 \(T\) 组数据,每组数据给定两个正整数 \(A,C\),求使 \(LCM(A,B)=C\) 的最小的 \(B\),若无解则输出NO SOLUTION. 分析 数论水题.当 \(C\%A=0\) 时有解.若有 \(LCM(A,B)=C\),则有 \(B\%(C/A)=0\)(为什么?).故 \(B\) 最小为 \(C/A\). #include<bits/stdc++.h> using namespace std; int T, A, C; int main() { scanf(&

FreakZ学习笔记:路由发现机制

路由发现机制 路由发现机制只有在发送通信包的过程中会被调用,而接收过程因为发送时候已经进行了通信链路的扫描和连接,所以不会再进行路由发现机制. 路由的所有处理机制都是在NWK层进行的,当然,路由发现机制也一样.当协议栈进行数据发送时,会依次按照APP->APS->NWK->MAC->PHY->Radio的层次关系来进行,APS层执行完成之后,会跳转到NWK层的nwk_data_req函数,该函数为NWK数据请求服务,接收APS层的数据并且加上NWK层的包头,然后将数据打包.n