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;
    }
  • 相关阅读:
    日区 Apple ID共享
    强大的视频跨平台视频处理软件
    百度网盘无限速
    App Store看片神器,请收好
    bootstrap 中这段代码 使bundles 失败
    C# EF中调用 存储过程并调回参数
    mvc 默认访问 Area 下控制器方法
    怎样用SQL语句查看查询的性能指标
    slice 定义和用法
    C# Regex类用法
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9643376.html
Copyright © 2011-2022 走看看