zoukankan      html  css  js  c++  java
  • codeforces#505--B Weakened Common Divisor

    B. Weakened Common Divisor

    time limit per test

    1.5 seconds

    memory limit per test

    256 megabytes

    input

    standard input

    output

    standard output

    During the research on properties of the greatest common divisor (GCD) of a set of numbers, Ildar, a famous mathematician, introduced a brand new concept of the weakened common divisor (WCD) of a list of pairs of integers.

    For a given list of pairs of integers (a1,b1)(a1,b1), (a2,b2)(a2,b2), ..., (an,bn)(an,bn) their WCD is arbitrary integer greater than 11, such that it divides at least one element in each pair. WCD may not exist for some lists.

    For example, if the list looks like [(12,15),(25,18),(10,24)][(12,15),(25,18),(10,24)], then their WCD can be equal to 22, 33, 55 or 66 (each of these numbers is strictly greater than 11 and divides at least one number in each pair).

    You're currently pursuing your PhD degree under Ildar's mentorship, and that's why this problem was delegated to you. Your task is to calculate WCD efficiently.

    Input

    The first line contains a single integer nn (1≤n≤1500001≤n≤150000) — the number of pairs.

    Each of the next nn lines contains two integer values aiai, bibi (2≤ai,bi≤2⋅1092≤ai,bi≤2⋅109).

    Output

    Print a single integer — the WCD of the set of pairs.

    If there are multiple possible answers, output any; if there is no answer, print −1−1.

    Examples

    input

    Copy

    3
    17 18
    15 24
    12 15
    

    output

    Copy

    6

    input

    Copy

    2
    10 16
    7 17
    

    output

    Copy

    -1
    

    input

    Copy

    5
    90 108
    45 105
    75 40
    165 175
    33 30
    

    output

    Copy

    5
    

    Note

    In the first example the answer is 66 since it divides 1818 from the first pair, 2424 from the second and 1212 from the third ones. Note that other valid answers will also be accepted.

    In the second example there are no integers greater than 11 satisfying the conditions.

    In the third example one of the possible answers is 55. Note that, for example, 1515 is also allowed, but it's not necessary to maximize the output.

    枚举一下第一对数的因子用set存下

    注意用素数筛来做不然会超时

    也要注意n=1的情况

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<map>
    #include<set>
    #include<bits/stdc++.h>
    #define inf 0x3f3f3f3f
    using namespace std;
    
    typedef long long LL;
    int n;
    const int maxn = 150005;
    LL a[maxn], b[maxn];
    set<LL> num;
    set<LL>::iterator it;
    
    void cal(LL x, LL y)
    {
        for(LL i = 2; i * i <= x; i++){
            if(x % i == 0){
                num.insert(i);
            }
            while(x % i == 0){
                x /= i;
            }
        }
        if(x > 1)
            num.insert(x);
    
        for(LL i = 2; i * i <= y; i++){
            if(y % i == 0){
                num.insert(i);
            }
            while(y % i == 0){
                y /= i;
            }
        }
        if(y > 1){
            num.insert(y);
        }
    }
    
    int main()
    {
        while(scanf("%d", &n) != EOF){
            num.clear();
            for(int i = 0; i < n; i++){
                scanf("%I64d%I64d", &a[i], &b[i]);
            }
            cal(a[0], b[0]);
    
            if(n == 1){
                it = num.begin();
                printf("%I64d
    ", *it);
            }
            else{
                bool ed = false;
                for(it = num.begin(); it != num.end(); it++){
                    bool flag = true;
                    LL t = *it;
                    for(int j = 1; j < n; j++){
                        if((a[j] % t != 0) && (b[j] % t != 0)){
                            flag = false;
                            break;
                        }
                    }
                    if(flag){
                        printf("%I64d
    ", t);
                        ed = true;
                        break;
                    }
                }
                if(!ed){
                    printf("-1
    ");
                }
            }
        }
    	return 0;
    }
  • 相关阅读:
    我的那些年(11)~去一家创业公司做架构师
    springboot~hazelcast缓存中间件
    我的那些年(10)~来到更大的团队,做了架构师
    springboot~maven制作底层公用库
    Vesions ignore & ld: library not found for -l...
    iOS利用单例实现不同界面间的数据传输
    UVA 10006
    VS2010打开就自动关闭问题解决
    模板方法模式(Template Method)
    HDU 4279
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9643376.html
Copyright © 2011-2022 走看看