Square Pair:唯一分解定理好题。

引理

若 \(x=y^2\times z\),且 \(x\) 是完全平方数,那么 \(z\) 也一定是完全平方数。

证明可以用唯一分解定理证,每次把偶数次幂的数消掉,那么剩下的一定是一堆次数为 \(1\) 的项乘在一起。而一个数是完全平方数的充分必要条件就是没有任何一个剩下次数为 \(1\) 的项。

正解

我们可以对于每一个数,单独把它剩下的一次项的乘积乘起来。因为那些完全平方因子是不影响最终答案的。

那么两个数的乘积要成完全平方数,这两个数剩下的一次项就都要完全相同,这个体现在它们剩下的一次项的乘积相同。

因此记录下每个数剩下一次项的乘积,开桶依次匹配即可。

时间复杂度 \(O(n \sqrt{n})\)。

代码

注意特判 \(0\)。

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
const int N=200005;
ll n,a[N],tot[N];
ll ans=0;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=2;i*i<=N+100;i++)
{
for(int j=1;j<=n;j++)
{
while(a[j]%(i*i)==0&&a[j]>1)a[j]/=(i*i);
}
}
for(int i=1;i<=n;i++)
{
if(a[i])ans+=tot[0]+tot[a[i]];
else ans+=i-1;
tot[a[i]]++;
}
cout<<ans;
return 0;
}

Atcoder ABC342D Square Pair 题解 [ 绿 ] [ 数论 ] [ 唯一分解定理 ]的更多相关文章

  1. AtCoder - 2286 (数论——唯一分解定理)

    题意 求n!的因子数%1e9+7. 思路 由唯一分解定理,一个数可以拆成素数幂之积,即2^a * 3^b *……,n!=2*3*……*n,所以计算每个素因子在这些数中出现的总次数(直接对2~n素因子分 ...

  2. FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】

    [唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...

  3. HDU-1215 七夕节 数论 唯一分解定理 求约数之和

    题目链接:https://cn.vjudge.net/problem/HDU-1215 题意 中文题,自己去看吧,懒得写:) 思路 \[ Ans=\prod \sum p_i^j \] 唯一分解定理 ...

  4. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  5. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  6. B - Common Divisors (codeforces)数论算法基本定理,唯一分解定理模板

    You are given an array aa consisting of nn integers. Your task is to say the number of such positive ...

  7. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  8. AtCoder Beginner Contest 169 题解

    AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...

  9. 简单数论之整除&质因数分解&唯一分解定理

    [整除] 若a被b整除,即a是b的倍数,那么记作b|a("|"是整除符号),读作"b整除a"或"a能被b整除".b叫做a的约数(或因数),a ...

  10. AtCoder ExaWizards 2019 简要题解

    AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...

随机推荐

  1. python虚拟环境管理之Pipenv

    GitHub:pypa/pipenv: Python Development Workflow for Humans. (github.com) 介绍: pipenv就是把pip和virtualenv ...

  2. 使用nginx 压缩

    现在的程序使用单页面应用,因此程序会在一开始就会加载页面JS.如果带宽不够,那么会影响页面下载速度. 我们可以使用NGINX 进行压缩,加快文件下载. gzip on; gzip_min_length ...

  3. new Date()在ios下的坑

    坑位 最新在开发一个时间轴功能,在使用new Date()的时候发现在IOS下全是NaN. Why new Date("2018-04-27 11:11")在chrome,fire ...

  4. Qt 窗口随控件变换大小

    QVBoxLayout* verticalLayout = new QVBoxLayout(this); verticalLayout->setSizeConstraint(QLayout::S ...

  5. 解密prompt系列44. RAG探索模式?深度思考模式?

    前一阵多步RAG的风吹入了工业界,kimi推出了探索版本,各应用都推出了深度搜索,You.COM更是早就有了Genius的多步模式.其实都是类似multi-hop RAG的实现.之前学术界在讨论mul ...

  6. 中电金信:GienTech动态|一波好消息→中标!多领域“开花”

  7. gitlab runner install

    gitlab-runner install -d /home/gitlab-runner/ --syslog --user gitlab-runner

  8. Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换

    一.前言 之前就写过这个方案,当时做的是ffmpeg内核版本,由于ffmpeg内核解析都是代码实现,所以无缝切换非常完美,看不到丝毫的中间切换过程,看起来就像是在一个通道画面中.其实这种切换只能说是取 ...

  9. Uniapp 获取当前版本号

    plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) { oldversion = wgtinfo.versionCode // ...

  10. [转]Makefile教程

    从0开始教你编写Makefile文件 跟我一起写Makefile-陈皓2005.pdf:链接: https://pan.baidu.com/s/1kKPfosCiPQONyZ1oeCmuAA 提取码: ...