【题目描述】

给定一个长度为 \(N\) 的非负整数序列 \(A=\left(A_1,\cdots,A_n\right)\)。求满足以下条件的整数对 \(\left(i,j\right)\) 的数量。

  • \(1\le i < j \le n\)
  • \(A_iA_j\) 是平方数

其中,如果某个非负整数 \(a\) 可以用某个非负整数 \(d\) 表示为 \(a=d^2\),那么称 \(a\) 是平方数。

【思路】

首先发现,一个数是平方数,当且仅当这个数的所有质因数的次数都是偶数。

因为 \(a\) 是平方数,考虑 \(a=d^2\),\(d\) 的分解为 \(d={p_1}^{q_1} {p_2}^{q_2} \cdots {p_n}^{q_n}\)。

则 \(a\) 的分解为 \(a={p_1}^{2q_1} {p_2}^{2q_2} \cdots {p_n}^{2q_n}\)​​。

所以 \(a\)​ 的所有质因数的次数都是偶数。

那么,两个数 \(A,B\)​ 的积是平方数,说明了这么个事:

  • \(A,B\) 两数都是平方数(每个质因子次数都是偶数):那做完乘法之后还是平方数(质因子次数还是偶数)

  • \(A,B\)​ 两个数,每个数都有次数是奇数的质因子,这些质因子是相同的,所以在做完乘法之后消去了。

举个例子:

  • 两个数都是平方数,乘法之后还是平方数:

    \(\begin{array}{c}
    \ \ \ \ \ \ \ \ A=2^2 \times 3^6 \times 7^4 \\
    \ \ \ \ \ \ \ \ B=2^2 \times 3^2 \times 7^2 \\
    A\times B=2^4 \times 3^8 \times 7^6
    \end{array}\)

  • 两个数都有次数是奇数的质因子,在做完乘法之后消去了:

    \(\begin{array}{c}
    \ \ \ \ \ \ \ \ A=2^2 \times 3^3 \times 7^1 \\
    \ \ \ \ \ \ \ \ B=2^2 \times 3^3 \times 7^5 \\
    A\times B=2^4 \times 3^6 \times 7^6
    \end{array}\)

所以我们可以得出一个普遍规律:

对于两个数,他们次数是奇数的质因子相同,那么两个数在做完乘法之后就是一个平方数。

但是这题有个坑,\(A_i\) 可能是 \(0\),所以要特判一下:

  • \(0\times0=0\) 是一个平方数
  • \(0\) 乘以任何数都是 \(0\)

于是这道题就4发罚时愉快的做完了。

嗯。

【Code】

#include <bits/stdc++.h>
#define int long long
using namespace std; int n,a[200005],Zero,ans;
map<int,int>s; //筛质数,加速找质因子
int Primes[200005],tot;
bool vis[200005];
void Search_primes(int n){
memset(vis,true,sizeof(vis));
vis[0]=vis[1]=0;
for(int i=2;i<=n;i++){
if(vis[i]) Primes[++tot]=i;
for(int j=1;j<=tot and i*Primes[j]<=n;j++){
vis[i*Primes[j]]=0;
if(i%Primes[j]==0) break;
}
}
} //计算一个数次数为奇数的质因子
int Bu(int x){
if(x==0) return 0;
int res=1,X=x;
for(int i=1;i<=tot;i++){
if(Primes[i]*Primes[i]>X) break;
if(x%Primes[i]==0){
int sum=0;
while(x%Primes[i]==0) x/=Primes[i],sum++;
if(sum%2==1) res*=Primes[i];
}
}
if(x>1) res*=x;
return res;
} signed main()
{
scanf("%lld",&n);
Search_primes(n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
s[Bu(a[i])]++;
if(a[i]==0) Zero++;
}
for(auto it:s){
int sum=it.second;
ans+=sum*(sum-1)/2;
}
printf("%lld",ans+Zero*(n-Zero));
return 0;
}

【后记】

祝大家上分。

由于手速不够快没交上题解。。。

[ABC342D] Square Pair 题解的更多相关文章

  1. CF934A A Compatible Pair 题解

    Content 有两个数列 \(A\) 和 \(B\),\(A\) 数列里面有 \(n\) 个元素,\(B\) 数列里面有 \(m\) 个元素,现在请从 \(A\) 数列中删除一个数,使得 \(A\) ...

  2. 竞赛题解 - [CF 1080D]Olya and magical square

    Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...

  3. hdu_5877_Weak Pair(离散+DFS+树状数组)

    题目链接:hdu_5877_Weak Pair 题意: 给你一棵树,让你找有多少对满足那两个条件的weak pair 题解: 有人用Treap,我不会,然后我用树状数组+离散来替代Treap,用DFS ...

  4. Codeforces Round #448 C. Square Subsets

    题目链接 Codeforces Round #448 C. Square Subsets 题解 质因数 *质因数 = 平方数,问题转化成求异或方程组解的个数 求出答案就是\(2^{自由元-1}\) , ...

  5. 题解报告:hdu 1398 Square Coins(母函数或dp)

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

  6. 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)

    [题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...

  7. LeetCode 题解 593. Valid Square (Medium)

    LeetCode 题解 593. Valid Square (Medium) 判断给定的四个点,是否可以组成一个正方形 https://leetcode.com/problems/valid-squa ...

  8. 题解 CF934A 【A Compatible Pair】 ——贪心

    题意: 给定两个数列 \(A\) . \(B\) ,元素个数分别为 \(n\) , \(m\) \((2 \le n,m \le 50)\) .数列中所有元素大小均在 \(-10^{9}\) 到 \( ...

  9. LeetCode题解:(221) Maximal Square

    题目说明 Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's a ...

  10. 【CF1436B】Prime Square 题解

    原题链接 题意简介 要求构造一个由不大于 1e5 的非负数构成的正方形矩阵,矩阵的每个元素不是质数,但每一行.每一列的数字的和都是质数. 思路分析 看到样例二,我们知道数字可以重复. 于是,我们很容易 ...

随机推荐

  1. C++实现常用的文件操作

    ①输出到文本文件(txt) 1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 int main ...

  2. ProtoBuf-gRPC实践

    目录介绍 01.gRPC学习背景 1.1 为什么要学RPC 1.2 RPC是什么 1.3 网络库收益分析 1.4 学习计划说明 1.5 学习问题思考 02.ProtoBuf的介绍 2.1 ProtoB ...

  3. 基于VS Code的JSDoc的使用指南

    1. 引言 JSDoc是一个用于 JavaScript 的API文档生成器,可以将文档注释直接添加到源代码中,JSDoc 工具将扫描您的源代码并提供一些操作,例如,生成一个 API 文档 JSDoc官 ...

  4. 摄影系列:李涛ps视频教程笔记

    四种颜色模式: HSB:人眼的识别. RGB:基于光.(RGB自然三原色,三个最大值,得出白色,所以RGB为加色模式) CMY:基于印刷.(青.品.黄印刷三原色,三个最大值,得出黑色,所以CMY为减色 ...

  5. 容器镜像加速指南:探索 Kubernetes 缓存最佳实践

    介绍 将容器化应用程序部署到 Kubernetes 集群时,由于从 registry 中提取必要的容器镜像需要时间,因此可能会出现延迟.在应用程序需要横向扩展或处理高速实时数据的情况下,这种延迟尤其容 ...

  6. js前端 md5加密

    1.在utils目录下新建md5.js 在这里,我把md5()这个方法使用export进行了导出,方便在其他地方使用es6 import 引入使用 /* * JavaScript MD5 1.0.1 ...

  7. docker安装es-header及相关问题解决

    安装es-header docker pull mobz/elasticsearch-head:5 docker run --restart=always --name elasticsearch-h ...

  8. DETR:Facebook提出基于Transformer的目标检测新范式,性能媲美Faster RCNN | ECCV 2020 Oral

    DETR基于标准的Transorfmer结构,性能能够媲美Faster RCNN,而论文整体思想十分简洁,希望能像Faster RCNN为后续的很多研究提供了大致的思路   来源:晓飞的算法工程笔记 ...

  9. KingbaseES参数track_activity_query_size介绍

    背景 同事A在客户现场,最近注意到客户的主数据库性能有所下降,尤其是在高峰时段.怀疑可能有一些复杂的查询影响了数据库的性能,但尚未确定具体是哪些查询. 为了诊断问题,A决定查看高峰期正在执行的查询,先 ...

  10. Python爬虫爬取ECVA论文标题作者摘要关键字等信息并存储到mysql数据库

    网站截图: 源代码: 1 import re 2 import requests 3 import pymysql 4 from bs4 import BeautifulSoup 5 import l ...