• codeforces 1025B Weakened Common Divisor(质因数分解)


    题意:

    给你n对数,求一个数,可以让他整除每一对数的其中一个

    思路:

    枚举第一对数的质因数,然后暴力

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<stack>
    #include<queue>
    #include<deque>
    #include<set>
    #include<vector>
    #include<map>
    #include<functional>
        
    #define fst first
    #define sc second
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    #define lson l,mid,root<<1
    #define rson mid+1,r,root<<1|1
    #define lc root<<1
    #define rc root<<1|1
    #define lowbit(x) ((x)&(-x)) 
    
    using namespace std;
    
    typedef double db;
    typedef long double ldb;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> PI;
    typedef pair<ll,ll> PLL;
    
    const db eps = 1e-7;
    const int mod = 1e9+7;
    const int maxn = 2e7+100;
    const int maxm = 2e6+100;
    const int inf = 0x3f3f3f3f;
    const db pi = acos(-1.0);
    
    inline int read(){
        int num;
        char ch;
        while((ch=getchar())<'0' || ch>'9');
        num=ch-'0';
        while((ch=getchar())>='0' && ch<='9'){
            num=num*10+ch-'0';
        }
        return num;
    }
    int c = 0;
    int p[maxn];
    void d(int x){
        for(int i=2;1ll*i*i<=x;i++)if(x%i==0){
            p[c++]=i;
            while(x%i==0)x/=i;
        }
        if(x>1)p[c++]=x;
    }
    ll gcd(ll a, ll b){
        return b == 0 ? a : gcd(b, a % b);
    }
    PLL pa[150000 + 100];
    bool cmp(PLL a, PLL b){
        return max(a.fst, a.sc) < max(b.fst, b.sc);
    }
    int main() {
        int n;
        scanf("%d", &n);
        
        for(int i = 0; i < n; i++){
            scanf("%I64d %I64d", &pa[i].fst, &pa[i].sc);
        }
        //sort(pa, pa+n, cmp);
        d(pa[0].fst);
        d(pa[0].sc);
        if(n==1){
            printf("%I64d", pa[0].fst);
            return 0;
        }
        for(int i = 0; i < c; i++){
            int flg = 1;
            for(int j = 0; j < n && flg; j++){
                if(pa[j].fst%p[i]!=0 && pa[j].sc%p[i]!=0) flg = 0;
    
            }
            if(flg){
                printf("%d", p[i]);
                return 0;
            }
        }
        printf("-1");
        return 0;
    }
  • 相关阅读:
    QT5:类总结
    QT5:控件
    QT5:事件
    杂谈感想:致毛星云大佬
    QT5:3D
    QT5:其他问题
    QT5:文件
    iOS开发小技巧
    vs2010 学习Silverlight学习笔记(24):TransForm处理图片
    vs2010 学习Silverlight学习笔记(25):综合图片应用和《功夫之王》相册
  • 原文地址:https://www.cnblogs.com/wrjlinkkkkkk/p/9505108.html
Copyright © 2020-2023  润新知