先把公比为1,即前项 中项 末项相同的统计出来。对每一类数C(n,3)即可。

然后我们发现,因为a1*a3=(a2)^2,所以a1和a3进行质因子分解之后,每一个质因子的指数的奇偶性必然相同,否则无法满足乘积为完全平方数。

然后sqrt(100000)以内的素数只有65个,我们对于每一个数,用unsigned long long存一个01串,代表前64个素因子的奇偶性,再单独用一个布尔存第65个。

然后该数还有可能有一个大素因子(>sqrt(x)),单独存一下,这样用一个三元组唯一标示每一个数。

a1和a3的三元组必然完全相同。

于是对于这样一个三元组,开个map套vector记录下符合其的数的个数(不超过log个),然后就很容易统计了。

复杂度其实很低,就是常数挺大。

#include<cstdio>
#include<bitset>
#include<map>
#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
struct Point{
ull S;
int x;
int y;
Point (const ull &A,const int &X,const int &Y){
S=A;
x=X;
y=Y;
}
Point(){ }
};
bool operator < (const Point &a,const Point &b){
if(a.S!=b.S){
return a.S<b.S;
}
if(a.x!=b.x){
return a.x<b.x;
}
return a.y<b.y;
}
map<Point,vector<int> >ma;
ll ans;
bool vis[100000];
int pri[1000],pr;
void shai(){
vis[1]=1;
for(int i=1;i*i<=100000;++i){
if(!vis[i]){
pri[pr++]=i;
for(int j=i*i;j*j<=100000;j+=i){
vis[j]=1;
}
}
}
}
int n,m,a[1000010];
ll num[100010];
int main(){
// freopen("e.in","r",stdin);
shai();
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
++num[a[i]];
}
for(int i=1;i<=100000;++i){
ans+=(num[i]*(num[i]-1ll)*(num[i]-2ll))/6ll;
}
sort(a+1,a+n+1);
int last=1;
for(int i=1;i<=n;++i){
if(a[i]!=a[i-1]){
int x=a[i];
ull S=0;
for(int j=0;j<pr-1;++j){
int cnt=0;
while(x%pri[j]==0){
++cnt;
x/=pri[j];
}
if(cnt%2!=0){
S|=((ull)1<<j);
}
}
int y=0,z;
while(x%pri[pr-1]==0){
++y;
x/=pri[pr-1];
}
y%=2;
z=x;
vector<int> v=ma[Point(S,y,z)];
for(int j=0;j<v.size();++j){
ans+=num[a[i]]*num[v[j]]*num[(int)(sqrt((ll)a[i]*(ll)v[j])+0.5)];
}
ma[Point(S,y,z)].push_back(a[i]);
last=i;
}
}
cout<<ans<<endl;
return 0;
}

【map】【分解质因数】CDOJ1572 Espec1al Triple的更多相关文章

  1. light oj 1236 分解质因数

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/H 题意:求满足1<=i<=j<=n ...

  2. hdu 5428 The Factor 分解质因数

    The Factor  Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest ...

  3. uva10791 uva10780(分解质因数)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  4. POJ 1142:Smith Numbers(分解质因数)

                                   Smith Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submiss ...

  5. uva10780(分解质因数)

    可以直接用高精度来暴力求. 也可以不用高精度: 把m分解质因数,记录每个因数和它的次数.然后计算每个因数在n的阶乘里出现了多少次,再把这个次数除以它在m中的次数,就是可能的k值.取最小的k. #inc ...

  6. 【CodeM初赛A轮】D 分解质因数+暴力

    题目描述树链是指树里的一条路径.美团外卖的形象代言人袋鼠先生最近在研究一个特殊的最长树链问题.现在树中的每个点都有一个正整数值,他想在树中找出最长的树链,使得这条树链上所有对应点的值的最大公约数大于1 ...

  7. 洛谷 P1072 Hankson 的趣味题 || 打质数表的分解质因数

    方法就是枚举,根据b0和b1可以大大减小枚举范围,方法类似这个http://blog.csdn.net/hehe_54321/article/details/76021615 将b0和b1都分解质因数 ...

  8. HDU 5428 分解质因数

                                                                                                   The F ...

  9. [Codeforces 1246B] Power Products (STL+分解质因数)

    [Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ...

随机推荐

  1. js_时间戳和时间格式之间的转换。

    关于我的理解,简单明了点: 时间戳:把一个日期使用一个数字表示出来,这个数字就是这个日期的秒数. 日期:就是我们常见的时间表现形式. 时间戳对于一般看时间不够直观明了,可是在程序的世界里作用可大了. ...

  2. End to End Sequence Labeling via Bidirectional LSTM-CNNs-CRF论文小结

    本篇论文是卡内基梅隆大学语言技术研究所2016年  arXiv:1603.01354v5 [cs.LG] 29 May 2016 今天先理解一下这个是什么意思:        找到的相关理解:arXi ...

  3. C++之指针,引用与数组

    引用只是对象的另一个名字,通过在变量名前面添加"&”符号来定义,而指针保存的是另一个对象的地址,它们两都提供了间接访问所服务变量的途径. 但是它们的差别还是挺大的: 先从它们的值说起 ...

  4. [device tree] interrupt mapping example

    This is for Devicetree Specification Release 0.1 Interrupt Mapping Example p19 在講解前,先帶進一些 PCI 的基礎觀念 ...

  5. mount/umount命令【转】

    转自:http://www.cnblogs.com/qq78292959/archive/2012/03/06/2382334.html 如果想在运行的Linux下访问其它文件系统中的资源的话,就要用 ...

  6. selenium WebElement 的属性和方法 属性

    tag_name 标签名,例如 'a'表示<a>元素get_attribute(name) 该元素name 属性的值text 该元素内的文本,例如<span>hello< ...

  7. Network——物理层-练习题与解答

    1. 无线电天线通常在其直径等于无线电波的波长的情况下工作效果最好.合理的天线直径的范围是从1厘米到5米.问所覆盖的频率范围是怎样的? 解答: λf = c , c=3x108 (m/s) 对于λ=1 ...

  8. linux命令(34):less命令

    1.命令格式: less [参数]  文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会 ...

  9. jmap 查看 map 内存占用

    cmd jps查看进程id jmap -dump:format=b,file=/tmp/dump.dat   进程id eclipse安装mat http://blog.csdn.net/bohu83 ...

  10. Mysql优化之my.cnf参数优化

    1.innodb_buffer_pool_size innodb_buffer_pool_size 参数用来设置Innodb 最主要的Buffer(Innodb_Buffer_Pool)的大小,也就是 ...