• Codeforces #505(div1+div2) B Weakened Common Divisor


    题意:给你若干个数对,每个数对中可以选择一个个元素,问是否存在一种选择,使得这些数的GCD大于1?

    思路:可以把每个数对的元素乘起来,然后求gcd,这样可以直接把所有元素中可能的GCD求出来,从小到大枚举即可,需要特判一下第一个元素是素数的情况。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    #include<map>
    #include<set>
    #include<bitset>
    #include<map>
    #include<queue>
    #include<cmath>
    #include<stack>
    #include<vector>
    #define INF 0x3f3f3f3f
    #define pii pair<int,int> 
    #define LL long long
    #define mk(a,b) make_pair(a,b)
    #define rep(i,n) for(int i=1;i<=n;i++)
    using namespace std;
    LL a[200010][2];
    inline LL gcd(LL x,LL y){
    	return y?gcd(y,x%y):x;
    }
    int main(){
    	int n;
    	scanf("%d",&n);
    	LL sum=0,ans=0;
    	for(int i=1;i<=n;i++){
    		scanf("%lld%lld",&a[i][0],&a[i][1]);
    		sum=gcd(a[i][0]*a[i][1],sum);
    	}
    	if(sum==1){
    		printf("-1
    ");
    		return 0;
    	}
    	for(int i=2;i*i<=a[1][0];i++){
    		if(ans==0&&sum%i==0)ans=i;
    		while(a[1][0]%i==0)a[1][0]/=i;
    	}
    	if(ans==0&&a[1][0]>1&&sum%a[1][0]==0)ans=a[1][0];
    	for(int i=2;i*i<=a[1][1];i++){
    		if(ans==0&&sum%i==0)ans=i;
    		while(a[1][1]%i==0)a[1][1]/=i;
    	}
    	if(ans==0&&a[1][1]>1&&sum%a[1][1]==0)ans=a[1][1];
    	printf("%lld
    ",ans);
    }
    

      

  • 相关阅读:
    python_控制台输出带颜色的文字方法
    模拟数据库作业
    js笔记
    CSS 笔记
    html 笔记
    必备技能-Git 使用规范流程
    python 闭包
    30个python编程技巧!
    python 面向对象
    python 线程
  • 原文地址:https://www.cnblogs.com/pkgunboat/p/9504011.html
Copyright © 2020-2023  润新知