HDU 5428 The Factor

来源:互联网 发布:udp的3100端口 编辑:程序博客网 时间:2024/05/04 02:32
对于每一个数字,它有用的部分其实只有它的所有质因子(包括相等的)。求出所有数的所有质因子中最小的两个,相乘就是答案。如果所有数字的质因子个数不到两个,那么就是无解。时间复杂度O(n*sqrt(a))

O(nsqrt(a))

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int vis[100000];int prime[100000];__int64 num[100000];int cnt=0;void Init(){    int i,j;    memset(vis,0,sizeof(vis));    for(i=2; i<=100000; i++)    {        if(!vis[i])        {            prime[cnt++]=i;        }        for(j=0; j<cnt&&i*prime[j]<100000; j++)        {            vis[i*prime[j]]=1;        }    }}int main(){    Init();    int t;    scanf("%d",&t);    while(t--)    {        int i,n;        scanf("%d",&n);        int sum=0;        int x;        for(i=1; i<=n; i++)        {            scanf("%d",&x);            int k=0;            for(int j=0; j<cnt&&prime[j]<=x&&k<2; j++)            {                while(x%prime[j]==0)                {                    k++;                    num[sum++]=prime[j];                    x/=prime[j];                    if(k>=2)                    {                        break;                    }                }            }            if(x!=1)            {                num[sum++]=x;            }        }        sort(num,num+sum);        if(sum<2)        {            printf("-1\n");        }        else        {            printf("%I64d\n",num[0]*num[1]);        }    }    return 0;}

0 0
原创粉丝点击