整除分块数论C. Floor and Mod
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整除分块数论C. Floor and Mod相关的知识,希望对你有一定的参考价值。
题目链接
https://codeforces.com/problemset/problem/1485/C
定义一对数 ( a , b ) (a,b) (a,b) 是特殊的,当且仅当 ⌊ a b ⌋ = a m o d b \\lfloor\\dfracab\\rfloor=a\\bmod b ⌊ba⌋=amodb
给定 x 和 y ,求一共有多少对特殊的数 ( a , b ) (a,b) (a,b), 1 ≤ a ≤ x , 1 ≤ b ≤ y 1\\le a\\le x,1\\le b\\le y 1≤a≤x,1≤b≤y
思路
这种推导式子的一般就是不断的对式子进行变形,然后在过程中发现相关的特性。
本题根据数据范围看,要么是结论题,要么是 O ( N ) O(\\sqrt N) O(N)的算法
⌊
a
b
⌋
=
a
−
⌊
a
b
⌋
∗
b
\\lfloor \\fracab \\rfloor = a - \\lfloor \\fracab \\rfloor * b
⌊ba⌋=a−⌊ba⌋∗b
⌊
a
b
⌋
(
b
+
1
)
=
a
\\lfloor \\fracab \\rfloor(b + 1) = a
⌊ba⌋(b+1)=a
⌊
a
b
⌋
=
a
b
+
1
\\lfloor \\fracab \\rfloor=\\fracab+1
⌊ba⌋=b+1a
这时发现特性: ⌊ a b ⌋ \\lfloor \\fracab \\rfloor ⌊ba⌋是整数,那么 a b + 1 \\fracab+1 b+1a也是整数,则1️⃣a是b+1的倍数,即 ( b + 1 ) ∣ a (b+1)|a (b+1)∣a
然后根据
⌊
a
b
⌋
=
a
%
b
\\lfloor \\fracab \\rfloor=a\\%b
⌊ba⌋=a%b
得到
0
≤
⌊
a
b
⌋
<
b
0 \\leq\\lfloor \\fracab \\rfloor<b
0≤⌊ba⌋<b
代换一下
⌊
a
b
⌋
\\lfloor \\fracab \\rfloor
⌊ba⌋得到
a
b
+
1
<
b
\\fracab+1<b
b+1a<b, 则 2️⃣
0
≤
a
<
b
2
+
b
0 \\leq a \\lt b^2 + b
0≤a<b2+b
结合上述两点性质,得到a
的个数为
b
2
+
b
−
1
b
+
1
\\fracb^2+b-1b+1
b+1b2+b−1
因为a
和b
需要满足固定的范围,则答案
r e s = ∑ b = 1 y m i n ( x , b 2 + b − 1 ) b + 1 res = \\sum_b=1^y \\fracmin(x, b^2+b-1)b+1 res=∑b=1yb+1min(x,b2+b−1)
我们只需要将b
枚举到
x
\\sqrt x
x即可,后面上面分子始终取x
,后面就可以用整除分块解决问题
l
=
b
+
1
l = b + 1
l=b+1进行整除分块,注意整除分块时还要注意对应的范围,
l
<
=
y
+
1
l<=y+1
l<=y+1,因为初始就加了一
l
<
=
x
l <= x
l<=x是因为后面就取零了,不能算上去,所以这个是右边界
代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
void solve()
ll x, y;
cin >> x >> y;
ll res = 0;
ll a = 1, b = 1;
for(; b * b - 1 <= x && b <= y; b++)
res += (b * b + b - 1) / (b + 1);
ll l = b + 1, r;
for(; l <= x && l <= y + 1; l = r + 1)
r = min(x / (x / l), y + 1);
res += x / l * (r - l + 1);
if(r == y + 1)
break;
cout << res << "\\n";
int main()
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
// t = 1;
while(t--)
solve();
return 0;
整除分块篇
https://blog.csdn.net/qq_50285142/article/details/123117313
以上是关于整除分块数论C. Floor and Mod的主要内容,如果未能解决你的问题,请参考以下文章