Codeforces 1029F Multicolored Markers 【数学】【性质】

#include<bits/stdc++.h>
#define INF 1e16+10000
using namespace std;
//97821761637600 97821761637600
long long ans=INF;
int lenb[1000000],lena[1000000];
int a1,b1;
int main(){
    ios::sync_with_stdio(false);
    long long a,b; cin>>a>>b;
    long long x=a+b;
    
    for(long long i=1;i*i<=a;i++) {
        if(a%i==0){
        //    cout<<i<<endl;
            lena[++a1]=i;
        }
    }
    //cout<<"!!!"<<endl;
    for(long long i=1;i*i<=b;i++) {
        if(b%i==0) {
        //    cout<<i<<endl;
            lenb[++b1]=i;
        }
    }
    
    //cout<<a1<<" "<<b1<<endl;
    
    int k1=0,k2=0;
    for(long long i=1;i*i<=x;i++){
        if( x%i==0 ){
            while( k1+1<=a1 && lena[k1+1]<=i ) k1++;
            while( k2+1<=b1 && lenb[k2+1]<=i ) k2++;
            
            if( x/i>=a/lena[k1] || x/i>=b/lenb[k2]){
                ans = min(ans,2*(i+x/i));
            }
        }
    }

    cout<<ans;
    return 0;    
}

猜你喜欢

转载自www.cnblogs.com/ZhenghangHu/p/9572715.html
今日推荐