UVA 11889-Benefit(數學_快速枚舉因子)
Recently Yaghoub is playing a new trick to sell some more. When somebody gives him
A Tomans,
he who never has appropriate changes, asks for
B Tomans such that lowest common multiple of
A and
B equals
to
C and he will pay back a round bill. Or otherwise take some snack instead of the remaining of his money. He believes that
finding such a number is hard enough that dissuades students from paying that.
You should write a program that help poor students giving the appropriate amount of money to Yaghoub. Of course if there are several answers you go for students' benefit which is the lowest of them.
Input
The first line begin with an integer
T (
T100000),
the number of tests. Each test that comes in a separate line contains two integers
A and
C ( 1
A,
C10
7).
Output
Print
the lowest integer
B such that
LCM(
A,
B)
=
C in a single line. If no such integer exists, print "
NO SOLUTION" instead. (Quotes
for clarity)
Sample Input
3
2 6
32 1760
7 16
Sample Output
3
55
NO SOLUTION
題意 :很簡單 給出a,c求滿足 lcm(a,b)==c 的最小整數b。沒有則輸出“NO SOLUTION”。
lcm(a,b)==a*b/gcd(a,b)==c --> a*b==gcd(a,b)*c; --> a/gcd(a,b)==c/b,因為a/gcd(a,b)肯定為整數,所以b肯定是c的因子,枚舉c的因子即可。
一開始純暴力枚舉c的因子T了一發,才明白數學果然是王道。 枚舉因子在判斷素數的時候就有過優化,即只需要枚舉到sqrt(c)。 還有一個優化條件是a必須是c的因子。因為
b/gcd(a,b)==c/a;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include