CF1967B2 Reverse Card (Hard Version) 题解

题目中要求的式子是:b×gcd⁡(a,b)mod  (a+b)=0b \times \gcd(a, b) \mod (a + b) = 0b×gcd(a,b)mod(a+b)=0

gcd⁡(a,b)=x, a=x×i, b=x×j\gcd(a, b) = x,~a = x \times i,~b = x \times jgcd(a,b)=x, a=x×i, b=x×j

条件变为:

  • x×j∗xmod  ((i+j)×x)=0x \times j * x \mod ((i + j) \times x) = 0x×jxmod((i+j)×x)=0
  • 1≤x∗i≤n1 \le x * i \le n1xin1≤x∗j≤m1 \le x * j \le m1xjm
  • gcd⁡(i,j)=1\gcd(i, j) = 1gcd(i,j)=1

根据第一个条件可知 j×xj \times xj×xi+ji + ji+j 的倍数,因为 gcd⁡(j,i+j)=1\gcd(j, i + j) = 1gcd(j,i+j)=1,所以 xxxi+ji + ji+j 的倍数,所以 x≥i+jx \ge i + jxi+j,然后根据第二个式子就知道 i≤n, j≤mi \le \sqrt n,~j \le \sqrt min, jm

枚举 (i,j)(i, j)(i,j) 即可,复杂度是 O(n×m×log⁡(min⁡(n,m)))O(\sqrt n \times \sqrt m \times \log(\min(n, m)))O(n×m×log(min(n,m)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值