其实这题并不难啊,但是分解因子的细节一定要小心。

\(比如样例48,2是因子说明24也是因子,也就是说假如x存在\)

\(那么x一定是因子中的最小数乘上最大数\)

\(那我们现在去验证x是否存在,先拿x去整除除数表,看看是否所有除数都是x的因子\)

\(然后再去判断x的因子个数是不是等于n(确保除数表包含所有因子)\)

\(考虑到d_i<=1e6,极端情况下x=1e12(我并不确定这种情况存在)\)

\(所以我们不一个一个判断sqrt(x)内的数是否是因子,而是采取短除法\)

ll x=zu,num=0,he=1;
for(int i=1;i<=cnt;i++)//用prime[]中的质数筛选
{
num=0;
if(x%prime[i]==0)
{
while(x%prime[i]==0) num++,x/=prime[i];
he*=(num+1);//包含num+1个prime[i]因子
}
}
if(x>1) he*=2;

\(比如说48=2^4*3^1,所以组合数学嘛,从2因子可以拿0,1,2,3,4个因子,有5种可能\)

\(从3因子可以拿0,1个因子两种可能,也就是总共5*2=10个因子\)

\(因为我们不能一个都不拿或者全部都拿(除数表不包括1和x),所以是10-2=8个因子\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+9;
ll t,n,a[301];
int prime[100009],cnt;
bool vis[maxn+10];
void make_prime()
{
for(int i=2;i<=maxn;i++)
{
if(!vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=maxn;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
int main()
{
cin>>t;
make_prime();
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
if(n>=2)
{
ll zu=a[1]*a[n],flag=1;
for(int i=2;i<=(n+1)/2;i++)//考虑奇数中间的数,所以(n+1)/2
{
if(a[i]*a[n-i+1]==zu) continue;
flag=0;
break;
}
if(flag==0) cout<<-1;
else
{
//判断zu有多少个因子
ll x=zu,num=0,he=1;
for(int i=1;i<=cnt;i++)//用prime[]中的质数筛选
{
num=0;
if(x%prime[i]==0)
{
while(x%prime[i]==0) num++,x/=prime[i];
he*=(num+1);//包含num+1个prime[i]因子
}
}
if(x>1) he*=2;
ll ans=0;
if(he-2==n) cout<<zu;
else cout<<-1;
}
}
else
{
if(vis[a[1]]) cout<<-1;
else cout<<a[1]*a[1];
}
cout<<endl;
}
}

最新文章

  1. 关于null值的排序
  2. CSS基础及选择器
  3. iOS的多版本配置(版本分离,多环境配置)
  4. codepage IMLangCodePages
  5. HTTP状态码整理
  6. winform学习之----打开文件对话框并将文件内容放入文本框
  7. myeclipse10 .jsp将表单提交给.java(form网页与后台通信初识)
  8. 危险的 SQL
  9. Eclipse查找类路径快捷方式
  10. 树莓派(jessie)制作服务并开机启动
  11. C#操作word封装
  12. Excel.Application手册
  13. GDI+ 图片转存
  14. VS.NET2010水晶报表安装部署[VS2010]
  15. 1.PHP连接mysql
  16. 转://工作中 Oracle 常用数据字典集锦
  17. RFID系统 免费开源代码 开发,分享[申明:来源于网络]
  18. 跟随我在oracle学习php(2)
  19. Jquery ajax ajaxStart()和ajaxStop()加载前的优雅表现
  20. docker的安装和使用

热门文章

  1. Java编程最差实践常见问题详细说明(2)转
  2. jquery 延迟执行方法
  3. Java中常用的七个阻塞队列介绍第一篇
  4. 接口测试中实际发生的几个问题——python中token传递
  5. I. Same String
  6. 原创hadoop2.6.4 namenode HA+Federation集群高可用部署
  7. JAVA的synchronized写法
  8. billu b0x2靶机渗透
  9. vue+element-ui中引入阿里播放器
  10. DataTable 与XML 交互