类欧几里得学习笔记

默认散行之间是相等关系。

F:

f(a,b,c,n)f(a,b,c,n)f(a,b,c,n)

∑i=0n⌊ai+bc⌋\sum_{i=0}^n \lfloor \frac{ai+b}{c}\rfloori=0∑n⌊cai+b⌋

Case 1 a=0

∑i=0n⌊bc⌋\sum_{i=0}^n \lfloor \frac{b}{c} \rfloori=0∑n⌊cb⌋

(n+1)⌊bc⌋(n+1)\lfloor \frac{b}{c} \rfloor(n+1)⌊cb⌋

Case2 a≥ca\ge ca≥c 或 b≥cb\ge cb≥c

∑i=0n⌊ac⌋i+⌊bc⌋+⌊(a mod c)i+b mod cc⌋\sum_{i=0}^{n} \lfloor \frac{a}{c}\rfloor i+ \lfloor \frac{b}{c}\rfloor+ \lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloori=0∑n⌊ca⌋i+⌊cb⌋+⌊c(amodc)i+bmodc⌋

SID1(n)⌊ac⌋+(n+1)⌊bc⌋+f(a mod c,b mod c,c,n)S_{ID_1}(n) \lfloor \frac{a}{c}\rfloor+(n+1) \lfloor \frac{b}{c}\rfloor+f(a\bmod c,b\bmod c,c,n)SID1(n)⌊ca⌋+(n+1)⌊cb⌋+f(amodc,bmodc,c,n)

Case 3 a<c,b<ca<c,b<ca<c,b<c

mx=⌊an+bc⌋mx= \lfloor \frac{an+b}{c}\rfloormx=⌊can+b⌋

∑i=0n∑j=0mx−1[j<⌊ai+bc⌋]\sum_{i=0}^{n}\sum_{j=0}^{mx-1} [j< \lfloor \frac{ai+b}{c}\rfloor]i=0∑nj=0∑mx−1[j<⌊cai+b⌋]

∑j=0mx−1∑i=0n[j<⌊ai+bc⌋]\sum_{j=0}^{mx-1}\sum_{i=0}^{n} [j< \lfloor \frac{ai+b}{c}\rfloor]j=0∑mx−1i=0∑n[j<⌊cai+b⌋]

∑j=0mx−1∑i=0n[j+1≤⌊ai+bc⌋]\sum_{j=0}^{mx-1}\sum_{i=0}^{n} [j+1\le \lfloor \frac{ai+b}{c}\rfloor]j=0∑mx−1i=0∑n[j+1≤⌊cai+b⌋]

∑j=0mx−1∑i=0n[jc+c≤ai+b]\sum_{j=0}^{mx-1}\sum_{i=0}^{n} [jc+c\le ai+b]j=0∑mx−1i=0∑n[jc+c≤ai+b]

∑j=0mx−1∑i=0n[jc+c<ai+b+1]\sum_{j=0}^{mx-1}\sum_{i=0}^{n} [jc+c< ai+b+1]j=0∑mx−1i=0∑n[jc+c<ai+b+1]

∑j=0mx−1∑i=0n[jc+c−b−1<ai]\sum_{j=0}^{mx-1}\sum_{i=0}^{n} [jc+c-b-1<ai]j=0∑mx−1i=0∑n[jc+c−b−1<ai]

∑j=0mx−1∑i=1n[jc+c−b−1<ai]\sum_{j=0}^{mx-1}\sum_{i=1}^{n} [jc+c-b-1<ai]j=0∑mx−1i=1∑n[jc+c−b−1<ai]

∑j=0mx−1n−∑i=1n[jc+c−b−1≥ai]\sum_{j=0}^{mx-1}n-\sum_{i=1}^{n} [jc+c-b-1\ge ai]j=0∑mx−1n−i=1∑n[jc+c−b−1≥ai]

∑j=0mx−1n−⌊jc+c−b−1a⌋\sum_{j=0}^{mx-1}n-\lfloor \frac{jc+c-b-1}{a}\rfloorj=0∑mx−1n−⌊ajc+c−b−1⌋

mxn−f(c,c−b−1,a,mx−1)mxn-f(c,c-b-1,a,mx-1)mxn−f(c,c−b−1,a,mx−1)

AT_abc443_g [ABC443G] Another Mod of Linear Problem

给定 nnn,求有多少 0≤k<n0\le k< n0≤k<n,满足 (ak+b) mod m>k(ak+b)\bmod m>k(ak+b)modm>k

(ak+b) mod m=(ak+b)−⌊ak+bm⌋m>k(ak+b)\bmod m=(ak+b)-\lfloor \frac{ak+b}{m}\rfloor m>k(ak+b)modm=(ak+b)−⌊mak+b⌋m>k

⌊ak+bm⌋m<(a−1)k+b\lfloor \frac{ak+b}{m}\rfloor m<(a-1)k+b⌊mak+b⌋m<(a−1)k+b

⌊ak+bm⌋m≤(a−1)k+(b−1)\lfloor \frac{ak+b}{m}\rfloor m\le(a-1)k+(b-1)⌊mak+b⌋m≤(a−1)k+(b−1)

⌊ak+bm⌋≤⌊(a−1)k+(b−1)m⌋\lfloor \frac{ak+b}{m}\rfloor\le \lfloor \frac{(a-1)k+(b-1)}{m}\rfloor⌊mak+b⌋≤⌊m(a−1)k+(b−1)⌋

相差 k+1≤mk+1\le mk+1≤m 相差不超 111.。

n−∑i=0n−1(⌊ak+bm⌋−⌊(a−1)k+(b−1)m⌋)n-\sum_{i=0}^{n-1} (\lfloor \frac{ak+b}{m}\rfloor- \lfloor \frac{(a-1)k+(b-1)}{m}\rfloor)n−i=0∑n−1(⌊mak+b⌋−⌊m(a−1)k+(b−1)⌋)

n−f(a,b,m,n−1)+f(a−1,b−1,m,n−1)n-f(a,b,m,n-1)+f(a-1,b-1,m,n-1)n−f(a,b,m,n−1)+f(a−1,b−1,m,n−1)

有负数,所以要用 library。或者特殊处理负数除法。将 a,b 都加 m 可以避免使用负数。

代码:

用 library 写的,不喜勿喷。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
#define int long long
#define _ 300005
signed main(){
	int t; cin>>t;
	while (t--){
		int n,m,a,b; cin>>n>>m>>a>>b;
		cout<<n-floor_sum(n,m,a,b)+floor_sum(n,m,a-1,b-1)<<"\n";
	}
}

G:

g(a,b,c,n)g(a,b,c,n)g(a,b,c,n)

∑i=0n⌊ai+bc⌋2\sum_{i=0}^{n} \lfloor \frac{ai+b}{c}\rfloor^2i=0∑n⌊cai+b⌋2

Case 1 a=0a=0a=0

(n+1)⌊bc⌋2(n+1)\lfloor \frac{b}{c}\rfloor^2(n+1)⌊cb⌋2

Case 2 a≥ca\ge ca≥c 或 b≥cb\ge cb≥c

∑i=0n(⌊ac⌋i+⌊bc⌋+⌊(a mod c)i+b mod cc⌋)2\sum_{i=0}^{n}(\lfloor \frac{a}{c}\rfloor i+ \lfloor \frac{b}{c}\rfloor+ \lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloor)^2i=0∑n(⌊ca⌋i+⌊cb⌋+⌊c(amodc)i+bmodc⌋)2

∑i=0n(⌊ac⌋i+⌊bc⌋)2+(⌊(a mod c)i+b mod cc⌋)2\sum_{i=0}^{n}(\lfloor \frac{a}{c}\rfloor i+ \lfloor \frac{b}{c}\rfloor)^2+ (\lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloor)^2i=0∑n(⌊ca⌋i+⌊cb⌋)2+(⌊c(amodc)i+bmodc⌋)2

+2(⌊ac⌋i+⌊bc⌋)(⌊(a mod c)i+b mod cc⌋)+2(\lfloor \frac{a}{c}\rfloor i+ \lfloor \frac{b}{c}\rfloor)(\lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloor)+2(⌊ca⌋i+⌊cb⌋)(⌊c(amodc)i+bmodc⌋)

∑i=0n(⌊ac⌋i)2+(⌊bc⌋)2+2(⌊ac⌋i)(⌊bc⌋)+(⌊(a mod c)i+b mod cc⌋)2\sum_{i=0}^{n}(\lfloor \frac{a}{c}\rfloor i)^2+ (\lfloor \frac{b}{c}\rfloor)^2+2(\lfloor \frac{a}{c}\rfloor i)(\lfloor \frac{b}{c}\rfloor)+ (\lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloor)^2i=0∑n(⌊ca⌋i)2+(⌊cb⌋)2+2(⌊ca⌋i)(⌊cb⌋)+(⌊c(amodc)i+bmodc⌋)2

+2(⌊ac⌋i+⌊bc⌋)(⌊(a mod c)i+b mod cc⌋)+2(\lfloor \frac{a}{c}\rfloor i+ \lfloor \frac{b}{c}\rfloor)(\lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloor)+2(⌊ca⌋i+⌊cb⌋)(⌊c(amodc)i+bmodc⌋)

⌊ac⌋2SID2(n)+(n+1)⌊bc⌋2+2⌊ac⌋⌊bc⌋SID1(n)\lfloor \frac{a}{c}\rfloor^2S_{ID_2}(n)+(n+1)\lfloor \frac{b}{c}\rfloor^2+2\lfloor \frac{a}{c}\rfloor \lfloor \frac{b}{c}\rfloor S_{ID_1}(n)⌊ca⌋2SID2(n)+(n+1)⌊cb⌋2+2⌊ca⌋⌊cb⌋SID1(n)

g(a mod c,b mod c,c,n)+2⌊ac⌋h(a mod c,b mod c,c,n)+2⌊bc⌋f(a mod c,b mod c,c,n)g(a\bmod c,b\bmod c,c,n)+2\lfloor \frac{a}{c}\rfloor h(a\bmod c,b\bmod c,c,n)+2\lfloor \frac{b}{c}\rfloor f(a\bmod c,b\bmod c,c,n)g(amodc,bmodc,c,n)+2⌊ca⌋h(amodc,bmodc,c,n)+2⌊cb⌋f(amodc,bmodc,c,n)

Case 3 a<c,b<ca<c,b<ca<c,b<c

∑i=0n∑j=0mx−1[j<⌊ai+bc⌋](2j+1)\sum_{i=0}^{n}\sum_{j=0}^{mx-1} [j< \lfloor \frac{ai+b}{c}\rfloor](2j+1)i=0∑nj=0∑mx−1[j<⌊cai+b⌋](2j+1)

∑j=0mx−1(2j+1)n−(2j+1)∑i=1n[jc+c−b−1≥ai]\sum_{j=0}^{mx-1}(2j+1)n-(2j+1)\sum_{i=1}^{n} [jc+c-b-1\ge ai]j=0∑mx−1(2j+1)n−(2j+1)i=1∑n[jc+c−b−1≥ai]

2SID1(mx−1)n+mxn−∑j=0mx−1(2j+1)⌊jc+c−b−1a⌋2S_{ID_1}(mx-1)n+mxn-\sum_{j=0}^{mx-1}(2j+1)\lfloor \frac{jc+c-b-1}{a}\rfloor2SID1(mx−1)n+mxn−j=0∑mx−1(2j+1)⌊ajc+c−b−1⌋

2SID1(mx−1)n−2h(c,c−b−1,a,mx−1)−f(a,b,c,n)2S_{ID_1}(mx-1)n-2h(c,c-b-1,a,mx-1)-f(a,b,c,n)2SID1(mx−1)n−2h(c,c−b−1,a,mx−1)−f(a,b,c,n)

H:

∑i=0n⌊ai+bc⌋i\sum_{i=0}^n \lfloor \frac{ai+b}{c}\rfloor ii=0∑n⌊cai+b⌋i

Case 1 a=0

SID1(n)⌊bc⌋S_{ID_1}(n)\lfloor \frac{b}{c}\rfloorSID1(n)⌊cb⌋

Case 2 a≥ca\ge ca≥c 或 b≥cb\ge cb≥c

∑i=0n⌊(a mod c)i+b mod cc⌋i+i2⌊ac⌋+i⌊bc⌋\sum_{i=0}^n \lfloor \frac{(a\bmod c)i+b\bmod c}{c}\rfloor i+i^2\lfloor \frac{a}{c}\rfloor+i\lfloor \frac{b}{c}\rfloori=0∑n⌊c(amodc)i+bmodc⌋i+i2⌊ca⌋+i⌊cb⌋

h(a mod c,b mod c,c,n)+SID2(n)⌊ac⌋+SID1(n)⌊bc⌋h(a\bmod c,b\bmod c,c,n)+S_{ID_2}(n)\lfloor \frac{a}{c}\rfloor+S_{ID_1}(n)\lfloor \frac{b}{c}\rfloorh(amodc,bmodc,c,n)+SID2(n)⌊ca⌋+SID1(n)⌊cb⌋

Case 3 a<c,b<ca<c,b<ca<c,b<c

∑j=0mx−1∑i=1n[jc+c−b−1<ai]i\sum_{j=0}^{mx-1}\sum_{i=1}^{n} [jc+c-b-1<ai]ij=0∑mx−1i=1∑n[jc+c−b−1<ai]i

∑j=0mx−1n−SID1(⌊jc+c−b−1a⌋)\sum_{j=0}^{mx-1}n-S_{ID_1}(\lfloor \frac{jc+c-b-1}{a}\rfloor)j=0∑mx−1n−SID1(⌊ajc+c−b−1⌋)

∑j=0mx−1n−⌊jc+c−b−1a⌋⌊jc+c−b−1a⌋(2−1)−⌊jc+c−b−1a⌋(2−1)\sum_{j=0}^{mx-1} n-\lfloor \frac{jc+c-b-1}{a}\rfloor\lfloor \frac{jc+c-b-1}{a}\rfloor(2^{-1})-\lfloor \frac{jc+c-b-1}{a}\rfloor(2^{-1})j=0∑mx−1n−⌊ajc+c−b−1⌋⌊ajc+c−b−1⌋(2−1)−⌊ajc+c−b−1⌋(2−1)

mxn−g(c,c−b−1,a,mx−1)(2−1)−f(c,c−b−1,a,mx−1)(2−1)mxn-g(c,c-b-1,a,mx-1)(2^{-1})-f(c,c-b-1,a,mx-1)(2^{-1})mxn−g(c,c−b−1,a,mx−1)(2−1)−f(c,c−b−1,a,mx−1)(2−1)

复杂度证明

考虑 a,c。

当 a>=c 时,a %=c。

当 a<c 时,交换。

常数翻倍(不止两倍)的辗转相除。

思考

k(a,b,c,n)=(sum(ai+b)/c)3k(a,b,c,n)=(sum(ai+b)/c) ^3k(a,b,c,n)=(sum(ai+b)/c)3。
l(a,b,c,n)=sum(ai+b)/c×i2l(a,b,c,n)=sum(ai+b)/c \times i^2l(a,b,c,n)=sum(ai+b)/c×i2。
p(a,b,c,n)=(sum(ai+b)/c)2×ip(a,b,c,n)=(sum(ai+b)/c)^2 \times ip(a,b,c,n)=(sum(ai+b)/c)2×i。

有会的可以评论区。

代码

实现时可能与公式不同。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define N 1000010
#define M 998244353
#define K 499122177
#define L 166374059 
struct node{int f,g,h;}ans;
int is(int n){return n*(n+1)%M*K%M;}
int ifs(long long n){
	__int128 tmp=n*(n+1); 
	tmp*=2*n+1; tmp%=M; tmp=tmp*L;
	return (long long) tmp%M;
}
node solve(int a,int b,int c,int n){
	if (a==0){
		ans.f=(n+1)*(b/c)%M;
		ans.g=n*(n+1)/2%M*(b/c)%M;
		ans.h=(b/c)*(b/c)%M*(n+1)%M;
	}
	else if (a>=c||b>=c){
		node tmp=solve(a%c,b%c,c,n);
		ans.f=tmp.f+is(n)*(a/c)%M+(n+1)*(b/c)%M;
		ans.g=tmp.g+ifs(n)*(a/c)%M+is(n)*(b/c)%M;
		ans.h=tmp.h+2*(a/c)*tmp.g%M+2*(b/c)*tmp.f%M+ifs(n)*(a/c)%M*(a/c)%M+2*is(n)*(a/c)%M*(b/c)%M+(n+1)*(b/c)%M*(b/c)%M;
	}else{
		int m=(a*n+b)/c;
		//颈终绝烂 
		if (!m) return node{0,0,0};
		node tmp=solve(c,c-b-1,a,m-1);
		ans.f=m*n-tmp.f;
		ans.g=is(n)*m%M-K*tmp.h%M-K*tmp.f%M;
		ans.h=is(m)*2*n%M-2*tmp.g%M-2*tmp.f%M-ans.f%M;
	}
	return node{(ans.f%M+M)%M,(ans.g%M+M)%M,(ans.h%M+M)%M};
}
signed main(){
	int t; cin>>t;
	while (t--){
		int n,a,b,c;
		cin>>n>>a>>b>>c;
		node ans=solve(a,b,c,n);
		cout<<(long long)ans.f<<" "<<(long long)ans.h<<" "<<(long long)ans.g<<"\n";
	}
}

完结撒花(写了 7500+ 字)。

相关推荐
aluluka2 小时前
Emacs折腾日记(三十六)——打造个人笔记系统
笔记·python·emacs
wangluoqi2 小时前
26.2.2练习总结
算法
2301_765703142 小时前
C++中的工厂模式实战
开发语言·c++·算法
晚霞的不甘2 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
d_b_2 小时前
UCIE 笔记(一)
笔记·学习·芯片
悠哉悠哉愿意2 小时前
【强化学习学习笔记】强化学习简介
笔记·学习·强化学习
星火开发设计2 小时前
C++ 输入输出流:cin 与 cout 的基础用法
java·开发语言·c++·学习·算法·编程·知识
AI_56782 小时前
用Everything+Total Commander管理电脑文件
人工智能·学习
秦奈2 小时前
Unity复习学习随笔(11):二进制存储
学习