zoukankan      html  css  js  c++  java
  • Codeforces 1025B Weakened Common Divisor

    Codeforces 1025B Weakened Common Divisor

    题目大意:给出若干组数对((a_1, b_1),(a_2, b_2), (a_3, b_3), (a_4, b_4)),定义(WCD)为满足每一个数对中至少作为一个数字的因子的正整数,现在要求你求出(WCD)

    试图用暴力解决问题,以为最多也就枚举到(sqrt{max(a_i,b_i)})的素数就好,然后发现并不可能,如果给出的数全是大素数,就凉了.

    正解

    (x=gcd(lcm(a_1, b_1),lcm(a_2, b_2),lcm(a_3,b_3)))

    挑出来(x)因子中最小的就好

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstring>
    #include <cmath> 
    #include <algorithm>
    
    typedef long long ll;
    
    const int N = 150005;
    const int q = 600005;
    
    ll n, a[N], b[N];
    ll qwq, ans = 19260817000;
    
    inline long long read(){
    	long long x = 0, f = 1;
    	char c = getchar();
    	while(c < '0' || c > '9'){
    		c = getchar();
    	}
    	while(c >= '0' && c <= '9'){
    		x = (x << 3) + (x << 1) + (c ^ 48);
    		c = getchar();
    	}
    	return x * f;
    }
    
    ll gcd(ll a, ll b){
    	if(b == 0) return a;
    	else return gcd(b, a % b);
    }
    
    int main(){
    	n = read();
    	for(int i = 1; i <= n; ++i){
    		a[i] = read(); b[i] = read();
    		qwq = gcd(qwq, 1ll* b[i] * a[i] / gcd(b[i], a[i]));
    
    	}
    	if(qwq == 1){
    		printf("-1
    ");
    		return 0;
    	}
    	
    
    	for(int i = 1; i <= n; ++i){
    		ll x = gcd(qwq, a[i]);
    		if(x > 1) qwq = x;
    		ll y = gcd(qwq, b[i]);
    		if(y > 1) qwq = y;
    	}
    
    	printf("%I64d
    ", qwq);
    
    	return 0;
    }
    

    晚上打cf,脑子不好使

  • 相关阅读:
    [转]mysql视图学习总结
    [转]mysql索引详解
    mysql索引的操作
    [转]mysql的约束
    mysql表的操作
    【转】mysql的数据类型
    java泛型
    java 8新特性
    Dubbo有意思的特性介绍
    dubbo + zookeeper
  • 原文地址:https://www.cnblogs.com/LMSH7/p/9508657.html
Copyright © 2011-2022 走看看