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. Java之基础语法

    最近发现公司中老的项目有些是基于Java开发的, 为了更好的后期维护 不得而要好好了解一下java, 之前一直比较抵触这门语言,现在随着了解的语言(PHP,Python,golang,shell,no ...

  2. Python3.6,3.7,3.8版本对比

    本文列举了Python3.6.3.7.3.8三个版本的新特性,学习它们有助于提高对Python的了解,跟上最新的潮流. 一.Python3.6新特性 1.新的格式化字符串方式 新的格式化字符串方式,即 ...

  3. ssh之秘钥登陆

    前提: 1. 秘钥的生成需要OpenSSL的支持, 需要自行进行安装 一. 新建用户 在root登陆状态中执行命令: useradd -m ssh-user # centosadduser ssh-u ...

  4. Redis工具之redis_rdb_tools

    redis_rdb_tools工具的介绍: 解析redis的dump.rdb文件,分析内存,以JSON格式导出数据.|提供的功能有: 1. 生成内存报告 2. 转储文件到JSON 3. 使用标准的di ...

  5. Abp Vnext Vue Element UI实现

    Abp Vnext Vue Element UI实现版本开箱即用的中后台前端/设计解决方案 链接 AbpPro Vben5 Vue Element Plus 预览 点击查看效果 文档地址 点击查看文档 ...

  6. 【Web前端】【开源分享】H5登陆界面 - 2021年12月30日

    下载地址 Gitee下载 后续更新关注本文评论区作者萌狼蓝天的回复

  7. Qt音视频开发22-通用GPU显示

    一.前言 采用GPU来绘制实时视频一直以来都是个难点,如果是安防行业的做视频监控开发这块的人员,这个坎必须迈过去,本人一直从事的是安防行业的电子围栏这个相当小众的细分市场的开发,视频监控这块仅仅是周边 ...

  8. [转]axios 的理解和使用

    有废话少说,直接附上原文链接: axios 的理解和使用 axios.create(对axios请求进行二次封装) 拦截器 取消请求(axios.CancelToken) 其它链接: 1.axios中 ...

  9. C#中定义类时关于CLSCompliant属性的声明

    今天在做code analysis时,遇到了这个提示 Warning 1 CA1014 : Microsoft.Design : Mark 'Demo.exe' with CLSCompliant(t ...

  10. 开源轻量级 IM 框架 MobileIMSDK 的微信小程序端已发布!

    一.基本介绍 MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即时通讯库: 1)超轻量级.无任何第 3 方库依赖(开箱即用): 2)纯 JS 编写.ES6 语法.高度 ...