[ABC342D] Square Pair 题解
【题目描述】
给定一个长度为 \(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 题解的更多相关文章
- CF934A A Compatible Pair 题解
Content 有两个数列 \(A\) 和 \(B\),\(A\) 数列里面有 \(n\) 个元素,\(B\) 数列里面有 \(m\) 个元素,现在请从 \(A\) 数列中删除一个数,使得 \(A\) ...
- 竞赛题解 - [CF 1080D]Olya and magical square
Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...
- hdu_5877_Weak Pair(离散+DFS+树状数组)
题目链接:hdu_5877_Weak Pair 题意: 给你一棵树,让你找有多少对满足那两个条件的weak pair 题解: 有人用Treap,我不会,然后我用树状数组+离散来替代Treap,用DFS ...
- Codeforces Round #448 C. Square Subsets
题目链接 Codeforces Round #448 C. Square Subsets 题解 质因数 *质因数 = 平方数,问题转化成求异或方程组解的个数 求出答案就是\(2^{自由元-1}\) , ...
- 题解报告:hdu 1398 Square Coins(母函数或dp)
Problem Description People in Silverland use square coins. Not only they have square shapes but also ...
- 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)
[题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...
- LeetCode 题解 593. Valid Square (Medium)
LeetCode 题解 593. Valid Square (Medium) 判断给定的四个点,是否可以组成一个正方形 https://leetcode.com/problems/valid-squa ...
- 题解 CF934A 【A Compatible Pair】 ——贪心
题意: 给定两个数列 \(A\) . \(B\) ,元素个数分别为 \(n\) , \(m\) \((2 \le n,m \le 50)\) .数列中所有元素大小均在 \(-10^{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 ...
- 【CF1436B】Prime Square 题解
原题链接 题意简介 要求构造一个由不大于 1e5 的非负数构成的正方形矩阵,矩阵的每个元素不是质数,但每一行.每一列的数字的和都是质数. 思路分析 看到样例二,我们知道数字可以重复. 于是,我们很容易 ...
随机推荐
- C++实现常用的文件操作
①输出到文本文件(txt) 1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 int main ...
- ProtoBuf-gRPC实践
目录介绍 01.gRPC学习背景 1.1 为什么要学RPC 1.2 RPC是什么 1.3 网络库收益分析 1.4 学习计划说明 1.5 学习问题思考 02.ProtoBuf的介绍 2.1 ProtoB ...
- 基于VS Code的JSDoc的使用指南
1. 引言 JSDoc是一个用于 JavaScript 的API文档生成器,可以将文档注释直接添加到源代码中,JSDoc 工具将扫描您的源代码并提供一些操作,例如,生成一个 API 文档 JSDoc官 ...
- 摄影系列:李涛ps视频教程笔记
四种颜色模式: HSB:人眼的识别. RGB:基于光.(RGB自然三原色,三个最大值,得出白色,所以RGB为加色模式) CMY:基于印刷.(青.品.黄印刷三原色,三个最大值,得出黑色,所以CMY为减色 ...
- 容器镜像加速指南:探索 Kubernetes 缓存最佳实践
介绍 将容器化应用程序部署到 Kubernetes 集群时,由于从 registry 中提取必要的容器镜像需要时间,因此可能会出现延迟.在应用程序需要横向扩展或处理高速实时数据的情况下,这种延迟尤其容 ...
- js前端 md5加密
1.在utils目录下新建md5.js 在这里,我把md5()这个方法使用export进行了导出,方便在其他地方使用es6 import 引入使用 /* * JavaScript MD5 1.0.1 ...
- docker安装es-header及相关问题解决
安装es-header docker pull mobz/elasticsearch-head:5 docker run --restart=always --name elasticsearch-h ...
- DETR:Facebook提出基于Transformer的目标检测新范式,性能媲美Faster RCNN | ECCV 2020 Oral
DETR基于标准的Transorfmer结构,性能能够媲美Faster RCNN,而论文整体思想十分简洁,希望能像Faster RCNN为后续的很多研究提供了大致的思路 来源:晓飞的算法工程笔记 ...
- KingbaseES参数track_activity_query_size介绍
背景 同事A在客户现场,最近注意到客户的主数据库性能有所下降,尤其是在高峰时段.怀疑可能有一些复杂的查询影响了数据库的性能,但尚未确定具体是哪些查询. 为了诊断问题,A决定查看高峰期正在执行的查询,先 ...
- Python爬虫爬取ECVA论文标题作者摘要关键字等信息并存储到mysql数据库
网站截图: 源代码: 1 import re 2 import requests 3 import pymysql 4 from bs4 import BeautifulSoup 5 import l ...