类欧几里得算法

∑ i = 0 n ⌊ a i + b c ⌋ \sum\limits_{i=0}^{n}\lfloor \frac{ai+b}{c} \rfloor i=0ncai+b

推式子步骤:

分类讨论

a = 0 a=0 a=0

是个最简式子

b ≥ c b\ge c bc a ≥ c a\ge c ac

f ( a   m o d   c , b   m o d   c , c , n ) f(a\bmod c,b\bmod c,c,n) f(amodc,bmodc,c,n) 转移过来,拆一下括号就行

其他情况

M = ⌊ a n + b c ⌋ M=\lfloor\frac{an+b}{c}\rfloor M=can+b

⌊ a i + b c ⌋ = ∑ j = 1 M [ j ≤ ⌊ a i + b c ⌋ ] \lfloor \frac{ai+b}{c} \rfloor=\sum_{j=1}^M [j\le\lfloor\frac{ai+b}{c}\rfloor] cai+b=j=1M[jcai+b⌋]

  1. 拆一下后面的除号
  2. 把所有 j j j 变成 j − 1 j-1 j1
  3. 交换求和顺序
  4. 变成 i > x i>x i>x 的形式
  5. 变成 n − i ≤ x n-i\le x nix 的形式
  6. 后面直接换成 f ( c , c − b − 1 , a , m − 1 ) f(c,c-b-1,a,m-1) f(c,cb1,a,m1)
int floor_sum(int n, int c, int a, int b) {
   
	if(a==0) return (n+1)*(b/c); 
	if(a>=c || b>=c) 
		return floor_sum(n, c, a%c, b%c)+n*(n+1)/2*(a/c)+(n+1)*(b/c); 
	int m=(a*n+b)/c; 
	return n*m-floor_sum(m-1, a, c, c-b-1); 
}

对于 ∑ i = 0 n ⌊ a i + b c ⌋ 2   ,   ∑ i = 0 n i ⌊ a i + b c ⌋ \sum\limits_{i=0}^{n}{\lfloor \frac{ai+b}{c} \rfloor}^2\,,\ \sum\limits_{i=0}^{n}i\lfloor \frac{ai+b}{c} \rfloor i=0ncai+b2, i=0nicai+b 的求解

推的方法类似,不过会互相调用

node floor_sum(int a, int b, int c, int n) {
   
	if(a==0) return {
   (n+1)*(b/c)%p, (n+1)*(b/c)%p*(b/c)%p, n*(n+1)%p*i2%p*(b/c)%p}; 
	if(a>=c || b>=c) {
   
		node t=floor_sum(a%c, b%c, c, n); 
		int F=t.f+n*(n+1)%p*i2%p*(a/c)%p+(n+1)*(b/c)%p; 
		int G=t.g+2*t.h%p*(a/c)%p+2*(b/c)%p*t.f%p+n*(n+1)%p*(2*n+1)%p*i6%p*(a/c)%p*(a/c)%p+(n+1)*n%p*(a/c)%p*(b/c)%p+(n+1)*(b/c)%p*(b/c)%p; 
		int H=t.h+n*(n+1)%p*(2*n+1)%p*i6%p*(a/c)%p+n*(n+1)%p*i2%p*(b/c)%p; 
		return {
   F%p, G%p, H%p}; 
	}
	int m=(a*n+b)/c; 
	node t=floor_sum(c, c-b-1, a, m-1); 
	int F=n*m%p-t.f; 
	int G=n*m%p*(m+1)%p-2*t.f%p-2*t.h%p-F; 
	int H=(m*n%p*(n+1)%p-t.g-t.f)%p*i2%p; 
	return {
   F%p, G%p, H%p}; 
}

相关推荐

  1. 算法

    2023-12-10 01:36:02       52 阅读
  2. 计算距离

    2023-12-10 01:36:02       31 阅读
  3. 扩展c++

    2023-12-10 01:36:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 01:36:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 01:36:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 01:36:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 01:36:02       91 阅读

热门阅读

  1. openssl生成nginx ssl证书的简单方法

    2023-12-10 01:36:02       55 阅读
  2. 力扣面试150题 | 26.删除有序数组的重复项

    2023-12-10 01:36:02       69 阅读
  3. SQL注入原理及思路(mysql)

    2023-12-10 01:36:02       57 阅读
  4. 力扣labuladong一刷day32天二叉树

    2023-12-10 01:36:02       63 阅读
  5. 一步一步写线程之一简单的开始

    2023-12-10 01:36:02       51 阅读
  6. 如何设计自动完成系统

    2023-12-10 01:36:02       61 阅读
  7. PCL 三维点云中求解圆的三维方程

    2023-12-10 01:36:02       59 阅读
  8. FPGA | Verilog基础语法

    2023-12-10 01:36:02       68 阅读
  9. Vue笔记(四)路由

    2023-12-10 01:36:02       52 阅读
  10. 请简要介绍一下HTML的发展史?

    2023-12-10 01:36:02       50 阅读
  11. 区间价值 --- 题解--动态规划

    2023-12-10 01:36:02       60 阅读