CF1967B2 Reverse Card (Hard Version) 题解

题目中要求的式子是: b × gcd ⁡ ( a , b ) m o d    ( a + b ) = 0 b \times \gcd(a, b) \mod (a + b) = 0 b×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 j gcd(a,b)=x, a=x×i, b=x×j

条件变为:

  • x × j ∗ x m o d    ( ( i + j ) × x ) = 0 x \times j * x \mod ((i + j) \times x) = 0 x×jxmod((i+j)×x)=0
  • 1 ≤ x ∗ i ≤ n 1 \le x * i \le n 1xin 1 ≤ x ∗ j ≤ m 1 \le x * j \le m 1xjm
  • gcd ⁡ ( i , j ) = 1 \gcd(i, j) = 1 gcd(i,j)=1

根据第一个条件可知 j × x j \times x j×x i + j i + j i+j 的倍数,因为 gcd ⁡ ( j , i + j ) = 1 \gcd(j, i + j) = 1 gcd(j,i+j)=1,所以 x x x i + j i + j i+j 的倍数,所以 x ≥ i + j x \ge i + j xi+j,然后根据第二个式子就知道 i ≤ n ,   j ≤ m i \le \sqrt n,~j \le \sqrt m in , 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、付费专栏及课程。

余额充值