观察发现,每次操作不会改变每个数字的奇偶性,且数组的总和是不会改变的。
考虑每个元素的奇偶性,当所有元素都是偶数时,最大公因数(gcd)起码是偶数(因为操作不改变奇偶性),有一种方法可以让一个元素降低为2,这样就有一个2作为素数的答案。
当有奇数和偶数时,考虑数组的总和sum的素因子,由于有奇数存在,所以2不能计入答案,对于其它的素因子x,设cnt是偶数的数量,当x * n + cnt <= sum时,一定存在一种方法使得该素因子可以成为最大公因数。
这里判断需要加上cnt的原因是偶数至少应该是2 * x,排除了2,x一定是奇数。
给定一个长度为 n 的正整数序列 x1,x2,…,xn。每次操作可以选择两个不同的下标 i 和 j,并同时执行 xi←xi+2,xj←xj−2。被减少的元素在操作后仍必须为正整数,即操作前 xj 必须大于 2。
现在想要通过任意多次操作,使得整序列的最大公约数(gcd(x1,x2,…,xn) )变成一个素数(即大于 1 且只能被 1 和自身整除的正整数)。
请你判断是否存在这样的方案,若存在,输出所有可能达到的最终最大公约数。
序列长度 n 满足 2≤n≤2×105,每个元素 xi 满足 1≤xi≤106。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.