hdu5428

来源:互联网 发布:顺丰科技 知乎 编辑:程序博客网 时间:2024/05/22 14:49

链接:点击打开链接

题意:给出一列数,在其中可以选择任意个数的数相乘,求相乘这个数的最小合数因子

代码:

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;long long prime[500005],num[500005];int main(){    long long i,j,t,n,cur,flag,sign;    long long temp[1005];    scanf("%I64d",&t);    while(t--){        flag=0;        scanf("%I64d",&n);        for(i=0;i<n;i++){        sign=0;                         //因为是求一个最小的合数因子,因此只要选其中两个        scanf("%I64d",&cur);            //最小质因子相乘即可        for(j=2;j*j<=cur;j++){            while(cur%j==0){            //分解质因子                temp[flag++]=j;                cur/=j;            }        }        if(cur!=1)        temp[flag++]=cur;               //如果是质数直接存上        }        if(flag==0||flag==1)            //质因子个数小于2输出-1        printf("-1\n");        else{            sort(temp,temp+flag);            printf("%I64d\n",temp[0]*temp[1]);        }    }    return 0;}

0 0
原创粉丝点击