zoukankan      html  css  js  c++  java
  • 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);
    }
    

      

  • 相关阅读:
    第03组 Alpha冲刺(3/6)
    第03组 Alpha冲刺(2/6)
    第03组 Alpha冲刺(1/6)
    团队项目-选题报告
    第3组 团队展示
    福大软工 · BETA 版冲刺前准备(团队)
    Alpha 事后诸葛亮
    Alpha冲刺
    Alpha冲刺-(9/10)
    Alpha冲刺
  • 原文地址:https://www.cnblogs.com/pkgunboat/p/9504011.html
Copyright © 2011-2022 走看看