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;
    }
  • 相关阅读:
    json 拼二维json数组
    lnmp 环境搭建
    lnmp git ruby sass 安装
    制定clone的用户名
    git branch 重命名
    sql命令创建数据库
    layerui
    弹出确认框,打开新窗口
    Ajax请求小结
    .net core注入服务
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9643376.html
Copyright © 2011-2022 走看看