3045 Lcm与Gcd构造

简介: 已知:gcd(a,b) = nlcm(a,b) = m求min(a,b)是多少通过gcd的了解我们可以知道,两个数a == k1 * n以及b == k2 * n并且gcd(k1,k2) == 1ab == n * mm == a * b/nab == k1 * k2 * n * n于是可以得到 m == k1 * k2 * n将n除到左边,可以得出m/n == k1 * k2于是k1 和 k2 都是 m / n的因子这样就可以以根号的复杂度找出这两个因子,并判断k1 和 k2 是否是互质的a + b == (k1 + k2 ) * n所以说代码:

已知:

gcd(a,b) = n

lcm(a,b) = m


求min(a,b)是多少


通过gcd的了解我们可以知道,两个数a == k1 * n以及b == k2 * n并且gcd(k1,k2) == 1


ab == n * m

m == a * b/n

ab == k1 * k2 * n * n

于是可以得到 m == k1 * k2 * n

将n除到左边,可以得出m/n == k1 * k2

于是k1 和 k2 都是 m / n的因子

这样就可以以根号的复杂度找出这两个因子,并判断k1 和 k2 是否是互质的

a + b == (k1 + k2 ) * n

所以说代码:


  int t = read;
    while(t--){
        ll n = read,m = read;
        ll lim = m / n;
        ll t1,t2;
        ll ans = 0x3f3f3f3f;
        for(ll i=1;i*i<=lim;i++){
            if(lim % i == 0){
                t1 = i,t2 = lim / i;
                if(gcd(t1,t2) == 1) ans = min(ans,(t1+t2)*n);
            }
        }
        printf("%lld\n",ans);
    }
目录
相关文章
|
C语言
C语言一个判断素数的函数fun,在主函数中计算1000以内所有素数的平均值并输出
C语言一个判断素数的函数fun,在主函数中计算1000以内所有素数的平均值并输出
175 0
【C++库函数之求最大公约数函数_ _gcd(a,b)】
【C++库函数之求最大公约数函数_ _gcd(a,b)】
【C++库函数之求最大公约数函数_ _gcd(a,b)】
1447. 最简分数 : 简单数论运用题(求 gcd 几种方式)
1447. 最简分数 : 简单数论运用题(求 gcd 几种方式)
(1)用函数实现最大公约数与最小公倍数
(1)用函数实现最大公约数与最小公倍数
|
数据库 iOS开发
ios多线程-GCD基本用法
ios中多线程有三种,NSTread, NSOperation,GCD 这篇就讲讲GCD的基本用法
|
算法
gcd算法
原理: 两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。即一步步的降低两个数的值,直到其中一个变成零,这时所剩下的还没有变成零的数就是两个数的最大公约数。
1414 0
|
移动开发 调度
GCD总结(一)
GCD为我们提供了三种类型的调度队列(dispatch queue),分别为串行,并行和主调度队列。     串行(Serial)     你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。
578 0

热门文章

最新文章