码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 类欧几里得算法


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

    推式子步骤:

    分类讨论

    a = 0 a=0 a=0

    是个最简式子

    b ≥ c b\ge c b≥c 或 a ≥ c a\ge c a≥c

    由 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​[j≤⌊cai+b​⌋]

    1. 拆一下后面的除号
    2. 把所有 j j j 变成 j − 1 j-1 j−1
    3. 交换求和顺序
    4. 变成 i > x i>x i>x 的形式
    5. 变成 n − i ≤ x n-i\le x n−i≤x 的形式
    6. 后面直接换成 f ( c , c − b − 1 , a , m − 1 ) f(c,c-b-1,a,m-1) f(c,c−b−1,a,m−1)
    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); 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对于 ∑ 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=0∑n​⌊cai+b​⌋2, i=0∑n​i⌊cai+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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    一文带你体验MRS HetuEngine如何实现跨源跨域分析
    面试经典-15-跳跃游戏 II
    【分布式】分布式锁解决方案介绍、DBMS级别乐观、悲观、redis的SETNX实现分布式锁
    Golang洗牌算法(Golang乱序算法)
    Day49——盒子类型,浮动属性,定位属性,JavaScript基础语法
    栈和队列——有效括号
    C++:stl:stack、queue、priority_queue介绍及模拟实现和容量适配器deque介绍
    [大数据]docker搭建Hadoop
    Leetcode刷题笔记5
    电压传感器: 工作原理、类型及电路图
  • 原文地址:https://blog.csdn.net/zhangtingxiqwq/article/details/132718582
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号