Codeforces - 1295D 欧拉函数 and Codeforces - 1270C 构造

<Codeforces - 1295D> 欧拉函数

http://codeforces.com/contest/1295/problem/D

题意:

给出a和m,在[0,m)内选一个x,满足gcd(a, m) = gcd(a + x, m),问x取值有多少种。

思路:

设g = gcd(a, m)
令a = xg, m = yg
题设gcd(xg, yg) = (xg + z, yg)
易知z∈[0, m)为g的倍数, 令z = kg, k∈[0, y)
即gcd(xg, yg) = gcd((x + k)g, yg)
则满足所有gcd(x + k, y) = 1且∈[0, y)的k都可以
即求[x, x + y)中与y互质的元素个数
将区间[x, x + y)分解为I1 = [x, y], I2 = (y, x + y)
所求即为I1, I2中与y互质的元素总数
而gcd(x, y) = gcd(y, x % y)
又x < y, k < y, x + k < 2y, 故(x + k) % y = x + k - y
因此x + k∈I2时, gcd(x + k, y) = gcd(y, x + k - y), (x + k - y)∈(0, x)
故I2中与y互质的元素个数与I2' = (0, x)中与y互质的元素个数相等
所求即为I1 = [x, y], I2' = (0, x)与y互质的元素总数
即[1, y]中与y互质的元素个数(欧拉函数)

AC代码:

<Codeforces - 1270C> 构造

http://codeforces.com/contest/1270/problem/C

题意:

给定n个数,在这n个数内最多添加3个数(也可不添加),使得新的这些数的和是他们异或和的2倍,打印添加的个数与添加的值。

思路:

先附加xor的值,这样sum = sum + xor,xor = xor ^ xor = 0;

再附加sum + xor,这样sum = 2 * (sum + xor),xor = 0 ^ (sum + xor) = sum + xor

即sum = 2 * xor,构造完毕。

AC代码:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章