整除分块数论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 1ax,1by


思路

这种推导式子的一般就是不断的对式子进行变形,然后在过程中发现相关的特性。

本题根据数据范围看,要么是结论题,要么是 O ( N ) O(\\sqrt N) O(N )的算法

⌊ a b ⌋ = a − ⌊ a b ⌋ ∗ b \\lfloor \\fracab \\rfloor = a - \\lfloor \\fracab \\rfloor * b ba=abab
⌊ 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 0ba<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 0a<b2+b

结合上述两点性质,得到a的个数为 b 2 + b − 1 b + 1 \\fracb^2+b-1b+1 b+1b2+b1

因为ab需要满足固定的范围,则答案

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+b1)

我们只需要将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的主要内容,如果未能解决你的问题,请参考以下文章

数论分块之整除分块

C - Floor and Mod(整除分块,数学)

luogu2261余数求和题解--整除分块

[CQOI2007]余数求和-整除分块

UVALive - 3521 Joseph's Problem (整除分块)

数论分块与整除相