codeforces 1025B Weakened Common Divisor STL,分解质因数

版权声明:本文为博主原创文章,转载请附上原博客链接。 https://blog.csdn.net/Dale_zero/article/details/81911970

题目链接:http://codeforces.com/problemset/problem/1025/B

给你n对数,要求在每一对数字中选一个,形成一个长度为n的数组。使得这些数有公共的因数。

因为一个数的所有因数都可以用其质因数组合出来,所以考虑分解质因数。

将第一组的两个数分解质因数,加到set中。之后对于每一组数遍历set,若都不能整除当前元素,即将其删除。

最后看set是否为空即可

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define mod 1000000007
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
using namespace std;

set<int> s;

    int n;
int pin()
{
    int flag=0;
     int p,q;
        For(k,1,n)
        {
            scanf("%d%d",&p,&q);
            if(k==1)
            {
                int tem=max(p,q);
                int i=2;
                int p1=p,q1=q;
                while(sqrt(p1)>=i)
                {
                    if(p%i==0)
                    {
                        s.insert(i);
                        //printf("i=%d\n",i);
                         while(p%i==0)p/=i;
                    }
                    i++;
                }
                if(p>1)
                    s.insert(p);
                i=2;
                while(sqrt(q1)>=i)
                {
                    if(q%i==0)
                    {
                        s.insert(i);
                         while(q%i==0)q/=i;
                    }
                    i++;
                }
                if(q>1)
                    s.insert(q);


            }
            else
            {
                auto c=s.begin();
                set<int> ss;
                for(;c!=s.end();c++)
                {

                    if(p%(*c)==0||q%(*c)==0)
                        ss.insert(*c);

                }
                if(ss.empty())
                        flag=1;
                s=ss;
            }

        }
        if(flag==1)
            return -1;
        return *(s.begin());
}

int main()
{
    while(~scanf("%d",&n))
    {
       printf("%d\n",pin());
    }
    return 0;

}

猜你喜欢

转载自blog.csdn.net/Dale_zero/article/details/81911970
今日推荐