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
결과: 4, 3, 55 NO SOLUTION
#include 
#define ll long long
using namespace std;

int gcd(int a,int b)
{
    if(b==0) return a;
    else return gcd(b,a%b);
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,c;
        cin>>a>>c;
        if(c%a!=0)
        {
            cout<<"NO SOLUTION"<<endl;
            continue;
        }
        int ans=c/a;
        int k=gcd(a,ans);
        while(k!=1)
        {
            a=a/k;
            ans=ans*k;
            k=gcd(a,ans);

        }
        cout<endl;
    }
    return 0;
}

 
다음으로 전송:https://www.cnblogs.com/nefu929831238/p/6130346.html

좋은 웹페이지 즐겨찾기