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不能算)\}\)

浙公网安备 33010602011771号