cf1470 B. Strange Definition(數學,數論)
阿新 • • 發佈:2021-12-27
題意:
\(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不能算)\}\)