cf1470 B. Strange Definition(数学,数论)

题意:

\(x\)\(y\) “相邻” 定义为 \(lcm(x,y)/gcd(x,y)\) 是个平方数。给定一个数组,每秒钟,数组中的所有数同时变为数组中与它相邻的所有数之积(包括它自己)。如果若干数两两相邻,则它们组成一个相邻组。q次询问,每次输入tim,输出第tim秒时最大相邻组的大小。

n,q <= 3e5,ai <= 1e6,tim <= 1e18

思路:

\(lcm(x,y)/gcd(x,y)={xy}/{g^2}\)。易证两数相邻等价于 \(xy\) 是平方数。

另外,相邻这一性质有反身性、对称性和传递性(\(ab,bc为平方数\implies acb^2为平方数\implies ac为平方数\)

\(x\)\(y\) 的质因子分解式中对应次数的和为偶,则 \(x\)\(y\) 相邻。所以只需考虑 \(x'=p_1^{k_1\%2}p_2^{k_2\%2}p_3^{k_3\%2}\cdots\)

第0秒时,\(x'\)\(y'\) 相邻当且仅当 \(x'=y'\) 。此时的答案为最大的相邻组的大小,即众数的出现次数。

大小为偶的相邻组里的所有数变成1,大小为奇的相邻组里的所有数永远不变。

做法:筛出1000内的质数,然后把数组中的每个数 \(x\) 分解质因子得到 \(x'\),开map记录出现次数。若不筛质数直接从2循环到根号x会慢整整1秒,这题用unorder_map和map速度没区别。然后遍历map统计答案。tim=0时答案是最大的map.second,tim>0时答案是 \(max\{1的出现次数+出现偶数次的次数和,出现奇数次的次数和(1不能算)\}\)

posted @ 2021-12-27 20:39  Bellala  阅读(85)  评论(0)    收藏  举报