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

\(比如样例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. c++缓冲区 vBufferChar.hpp

    //vbuffer_char.hpp //vov #ifndef V_BUFFER_CHAR_HPP #define V_BUFFER_CHAR_HPP #include <iostream&g ...

  2. shell 中获取子字符串的正确姿势

    前言 shell 取子串的方式有点特别,你写的匹配字符串是需要从头开始匹配的,第一个匹配到了才开始匹配下一个,这个类似于python中的match的工作方式. 1,获取子串有两种方式 使用字符串匹配的 ...

  3. CVE-2020-0796 永恒之蓝?

    0X00漏洞简介 Microsoft Windows和Microsoft Windows Server都是美国微软(Microsoft)公司的产品,Microsoft Windows是一套个人设备使用 ...

  4. Delphi TMemo 可以显示、编辑多行文本

    多行编辑框组件(TMemo)TMemo组件可以显示.编辑多行文本,是一个标准的Windows多行编辑组件.对一些比较多的文本内容可以利用TMemo组件来显示.编辑. 1.TMemo组件的典型用法 TM ...

  5. Eureka源码分析

    源码流程图 先上图,不太清晰,抱歉 一.Eureka Server源码分析 从@EnableEurekaServer注解为入口,它是一个标记注解,点进去看 注解内容如下 /** * 激活Eureka服 ...

  6. PHP函数:array_rand

    array_rand()  - 从数组中随机取出一个或多个单元. 说明: array_rand ( array $array [, int $num = 1 ] ) : mixed 参数: array ...

  7. 零基础的学习者应该怎么开始学习呢?Python核心知识学习思维分享

    近几年,Python一路高歌猛进,成为最受欢迎的编程语言之一,受到无数编程工作者的青睐. 据悉,Python已经入驻部分小学生教材,可以预见学习Python将成为一项提高自身职业竞争力的必修课.那么零 ...

  8. django基础(一) - 安装和配置文件

    django介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C. <div style='color: red'> ...

  9. Redis开发运维的陷阱及避坑指南

    原文首发于博客园,作者:后青春期的Keats:地址:https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! Linux 配置优化 我们在使用 Redis 过程中,可 ...

  10. 破解idea2019版本至2089年(windows系统)

    1.首先必须安装idea,然后找到安装目录下的bin目录下面 2.编辑俩个以.exe.vmoptions的文件(俩个文件的最后一行都得这样写) 3.重新打开idea,找到help下面的Register ...