zoukankan      html  css  js  c++  java
  • 某考试 T1 lcm

        把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n).

        因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b)的所有约数找出来,然后看a要有某个约数的话n至少是多少,更新答案即可。(因为1e9以下的数的最多的约数的级别是1e3)

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<ctime>
    #define ll long long
    using namespace std;
    
    int A,B,C,N,d[2333],num;
    ll ans=1ll<<62ll,w;
    
    //int gcd(int x,int y){ return y?gcd(y,x%y):x;}
    
    inline void solve(){
    	C=A-B;
    	for(int i=1;i*(ll)i<=C;i++) if(!(C%i)){
    		d[++num]=i;
    		if(i*(ll)i!=C) d[++num]=C/i;
    	}
    //	sort(d+1,d+num+1);
    	
    	for(int i=1,now;i<=num;i++){
    		now=d[i]-A%d[i];
    		
    		w=(A+now)*(ll)(B+now)/d[i];
    		if(w<ans||(w==ans&&now<N)) N=now,ans=w;
    	}
    }
    
    int main(){
    	freopen("lcm.in","r",stdin);
    	freopen("lcm.out","w",stdout);
    	
    	scanf("%d%d",&A,&B);
    	if(A<B) swap(A,B);
    	if(A==B){ puts("1"); return 0;}
    	
    	solve();
    	
    	cout<<N<<endl;
    	return 0;
    }
    

      

  • 相关阅读:
    (Problem 4)Largest palindrome product
    (Problem 3)Largest prime factor
    (Problem 2)Even Fibonacci numbers
    (Problem 1)Multiples of 3 and 5
    Ural 1086
    Ural 1319
    Ural 1149
    Ural 1079
    Ural 1068
    2016/04/06
  • 原文地址:https://www.cnblogs.com/JYYHH/p/9097149.html
Copyright © 2011-2022 走看看