D Strange Definition 质因素分解+思维
题解链接:https://blog.csdn.net/qq_44607936/article/details/112300338
题意
给出x,y相邻的定义:如果gcd(x,y)lcm(x,y) 是平方数,则称x,y两个数相邻。
给出一个长度为n的数列,每过一秒钟,数列中的每一个元素会被与它相邻的所有元素的乘积(包括它自身)所替换。
给出q个询问,问在第wi秒时,当前数列中哪个元素有最多的相邻元素,不需要给出这个元素是谁,只要给出它的相邻元素个数。
题解
首先, lcm(x,y)=gcd(x,y)x∗y,得出gcd(x,y)lcm(x,y)=gcd(x,y)2x∗y.
如果gcd(x,y)2x∗y=z2 是平方数, 则x∗y=z2∗gcd(x,y)2也是平方数。也可知如果x∗y是平方数,gcd(x,y)2x∗y也一定是平方数。
所以,gcd(x,y)lcm(x,y) 是平方数当且仅当x∗y是平方数。
x∗y是平方数,那么x∗y分解质因数后,每个质因数的指数必定是偶数,那么x和y分别分解质因数后其质因数的指数奇偶性必定相同。
也就是说,质因数的指数是多少已经不重要,只关心它们的奇偶性,那么就将指数模2变成0或1。将质因数指数01相同的数分成一组,它们之间质因数的指数奇偶性都相同,也就互相相邻。这样就能统计某一时刻最多的相邻元素个数了。
下面考虑每一个时刻的情况是怎么样的。
可以发现如果一个组内元素个数是偶数,那么经过一秒后,它们的质因数指数都将变成0(相乘时指数相加,偶数个1相加模2是0)。也就是说这样的组连同本来质因数指数就全是偶数的小组合成了一组。
如果组内元素个数是奇数,经过一秒后,它们的乘积的质因数指数将与它们完全一致(奇数个1相加依然是奇数)。就是说它们不会改变。
那么就能得出结论,1秒及之后的时间情况都是和1秒的时候相同的,答案只要考虑0秒和1秒之后两种情况。
具体统计某个01情况,可以将指数是奇数的质因数记录下来,如果两个数这些指数为1的质因数相同,那么它们就是同一组的。
可以用将指数是奇数的质因数hash记录,用map维护每个hash值有多少元素。具体见代码。