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%b); }
 7
 8 int main()
 9 {
10     int T;
11     scanf("%lld", &T);
12     LL a, c;
13     while(T--)
14     {
15         scanf("%lld%lld", &a, &c);
16         if(c % a == 0)
17         {
18             LL b = c / a;
19             LL g = gcd(a, b);
20             LL t = 1;
21             while(g != 1)
22             {
23                 a /= g;
24                 t *= g;
25                 g = gcd(a, b);
26             }
27             printf("%lld\n", b*t);
28         }
29         else puts("NO SOLUTION");
30     }
31
32     return 0;
33 }

代码君

时间: 2024-12-15 07:00:26

UVa 11889 (GCD) Benefit的相关文章

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

uva 1521 - GCD Guessing Game(贪心)

题目链接:uva 1521 - GCD Guessing Game 题目大意:给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x. 解题思路:其实就将1~N里面的素数都要考虑一遍,因为有一个N的限制,所以每次选出来的素数的积不大于N即可. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const

Uva 11388 GCD LCM ( 数论 )

Uva  11388 GCD LCM( 数论 ) 题意: 求是否存在a,b 使得lcm(a,b) = L, gcd(a,b) = G,不存在输出-1,存在输出a,b,且a尽可能小 分析: 强行暴力是不可能的数据很大,要用llu,这里有两种思路 思路一: 由题意可知 a*b = G*L 保证a = G的倍数的情况下,枚举a再判断G*L能否整除a,最后判断b是否为a的倍数.a从G开始扫到sqrt(G*L) //输入两个整数G,L //找出a,b 使得 gcd(a,b) = G lcm(a,b) =

UVA - 11388 GCD LCM

II U C   ONLINE   C ON TEST   2 008 Problem D: GCD LCM Input: standard input Output: standard output The GCD of two positive integers is the largest integer that divides both the integers without any remainder. The LCM of two positive integers is the

uva 11317 - GCD+LCM(欧拉函数+log)

题目链接:uva 11317 - GCD+LCM 题目大意:给定n,求出1~n里面两两的最大公约的积GCD和最小公倍数的积LCM,在10100进制下的位数. 解题思路:在n的情况下,对于最大公约数为i的情况又phi[n/i]次.求LCM就用两两乘积除以GCD即可. #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; ty

UVA 11426 - GCD - Extreme (II) (数论)

UVA 11426 - GCD - Extreme (II) 题目链接 题意:给定N,求∑i<=ni=1∑j<nj=1gcd(i,j)的值. 思路:lrj白书上的例题,设f(n) = gcd(1, n) + gcd(2, n) + ... + gcd(n - 1, n).这样的话,就可以得到递推式S(n) = f(2) + f(3) + ... + f(n) ==> S(n) = S(n - 1) + f(n);. 这样问题变成如何求f(n).设g(n, i),表示满足gcd(x, n)

UVA 11426 gcd求和

UVA 11426 gcd求和 O - GCD - Extreme (II) Time Limit:10000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 11426 Description Problem JGCD Extreme (II)Input: Standard Input Output: Standard Output Given the value of N, y

UVA 1521 - GCD Guessing Game(数论+贪心)

UVA 1521 - GCD Guessing Game 题目链接 题意:一个数字x在1-n之间,现在猜数字,每次猜一个数字a,告知gcd(x, a)的答案,问最坏情况下需要猜几次 思路:在素数上考虑,猜一组素数的乘积的数字,就可以把这些素数组成的数字都猜出来,答案就是组数,这样问题就是如何分组使得组数最小,每次取最后一个,尽量和前面小的合并,就能使得组数最小 代码: #include <cstdio> #include <cstring> #include <algorit

uva 11417 - GCD

GCDInput: Standard Input Output: Standard Output Given the value of N, you will have to find the value of G. The definition of G is given below:   Here GCD(i,j) means the greatest common divisor of integer i and integer j. For those who have trouble