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代码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值