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

\(比如样例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;
}
}

D. Almost All Divisors(数学分解因子)的更多相关文章

  1. divisors 数学

    divisors 数学 给定\(m\)个不同的正整数\(a_1, a_2,\cdots, a_m\),请对\(0\)到\(m\)每一个\(k\)计算,在区间\([1, n]\)里有多少正整数是\(a\ ...

  2. uva 993 Product of digits (贪心 + 分解因子)

      Product of digits  For a given non-negative integer number N , find the minimal natural Q such tha ...

  3. BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数

    BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数 Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系数不定方程的数学家之一. 为了纪念他,这些方程一般被称 ...

  4. Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化

    D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  5. HDU5812 Distance(枚举 + 分解因子)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5812 Description In number theory, a prime is a ...

  6. hdu 6069 Counting Divisors(求因子的个数)

    Counting Divisors Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Oth ...

  7. Divisors (求解组合数因子个数)【唯一分解定理】

    Divisors 题目链接(点击) Your task in this problem is to determine the number of divisors of Cnk. Just for ...

  8. Almost All Divisors(求因子个数及思维)

    ---恢复内容开始--- We guessed some integer number xx. You are given a list of almost all its divisors. Alm ...

  9. Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors (数学)

    题意:有\(n\)组数,对于每组数,问是否能找到两个因子\(d_{1},d{2}\),使得\(gcd(d_{1}+d_{2},a_{i}=1)\),如果有,输出它们,否则输出\(-1\). 题解:对于 ...

随机推荐

  1. AJ学IOS(17)UI之纯代码自定义Cell实现新浪微博UI

    AJ分享,必须精品 先看效果图 编程思路 代码创建Cell的步骤 1> 创建自定义Cell,继承自UITableViewCell 2> 根据需求,确定控件,并定义属性 3> 用get ...

  2. jquery的焦点图片无限循环关键思维

    在循环的时候,关键的是按(下一页按钮)到最后一页的时候和按(上一页按钮)到到第一页的时候如何转换: 首先必须知道3个js方法,prepend().append()和clone(); prepend() ...

  3. 2020-MRCTF

    ez_bypass I put something in F12 for you include 'flag.php'; $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx} ...

  4. MySQL笔记总结-DQL语言

    DQL语言 基础查询 一.语法 select 查询列表 from 表名; 二.特点 1.查询列表可以是字段.常量.表达式.函数,也可以是多个 2.查询结果是一个虚拟表 三.示例 1.查询单个字段 se ...

  5. mybatis源码学习:基于动态代理实现查询全过程

    前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 下面这条语句,将会调用代理对象的方法,并执行查询过程,我们一 ...

  6. 一个令人兴奋的ES6星特性-结构赋值

    学完了前4节,今天我给大家带来的是一个令人兴奋的特性:解构赋值.这个章节代码片段有点偏多,不过可以放心,一点都不烧脑,还是老样子:简单易懂. 什么是解构赋值 按照一贯的套路,接下来的内容是解释:什么是 ...

  7. netcore 下的policy授权自定义返回结果

    目前一直在用policy做权限校验,但是好像组里需要将返回结果统一,之前用的都是直接继承AuthorizationHandler然后调用context.Fail(),但是这样会导致没办法自定义返回结果 ...

  8. 日志分析工具ELK(三)

    目前官网更新特别快,不到半年时间就更新了好几个版本,目前最新的是5.1 以下安装配置使用4.5版本的 https://www.elastic.co/guide/en/kibana/4.5/index. ...

  9. awk命令及随机数的产生

    3.sed 操作,将文件第9行至第15行的数据复制到第十六行 sed -i  '9,15H;16G' 文件 4.用awk获取文件中的三行的倒数第二列字段 awk -F":" 'NR ...

  10. history of program atan2(y,x)和pow(x,y)

    编年史 1951 – Regional Assembly Language 1952 – Autocode 1954 – IPL (LISP语言的祖先) 1955 – FLOW-MATIC (COBO ...