转载自 link
先考虑一个简单的问题
f(a,b,c,n)=∑i=0n⌊cai+b⌋
我们这样来解决
f(a,b,c,n)=i=0∑n⌊cai+b⌋=f(a%c,b%c,c,n)+i=0∑n(i⌊ca⌋+⌊cb⌋)=f(a%c,b%c,c,n)+2n(n+1)⌊ca⌋+(n+1)⌊cb⌋令m=⌊can+b⌋则f(a,b,c,n)=i=0∑n⌊cai+b⌋=i=0∑nj=1∑m[⌊cai+b⌋≥j]=i=0∑nj=0∑m−1[⌊cai+b⌋≥j+1]=i=0∑nj=0∑m−1[ai+b≥cj+c]=i=0∑nj=0∑m−1[ai>cj+c−b−1]=i=0∑nj=0∑m−1[i>⌊acj+c−b−1⌋]=j=0∑m−1n−⌊acj+c−b−1⌋=nm−f(c,c−b−1,a,m−1)可以开始递归,递归出口m=0
然后我们考虑两个难一点的题目,同时解决这两个问题
h(a,b,c,n)=i=0∑n⌊cai+b⌋2g(a,b,c,n)=i=0∑ni⌊cai+b⌋
先来看h
====h(a,b,c,n)i=0∑n⌊cai+b⌋2i=0∑n(⌊c(a%c)i+(b%c)⌋+⌊ca⌋i+⌊cb⌋)2i=0∑n(⌊c(a%c)i+(b%c)⌋2+⌊ca⌋2i2+⌊cb⌋2+2⌊ca⌋i⌊cb⌋+2⌊c(a%c)i+(b%c)⌋⌊ca⌋i+2⌊c(a%c)i+(b%c)⌋⌊cb⌋h(a%c,b%c,c,n)+2⌊ca⌋g(a%c,b%c,c,n)+2⌊cb⌋f(a%c,b%c,c,n)+⌊ca⌋26n(n+1)(2n+1)+2⌊ca⌋⌊cb⌋2n(n+1)+(n+1)⌊cb⌋2
这里我们只用关心第一项
==========令m=⌊can+b⌋则h(a,b,c,n)i=0∑n⌊cai+b⌋2i=0∑n(j=1∑m[⌊cai+b⌋≥j])2i=0∑n(j=0∑m−1[i>⌊acj+c−b−1⌋])2i=0∑nj=0∑m−1[i>⌊acj+c−b−1⌋]k=0∑m−1[i>⌊ack+c−b−1⌋]i=0∑nj=0∑m−1k=0∑m−1[i>⌊acj+c−b−1⌋]∗[i>⌊ack+c−b−1⌋]i=0∑nj=0∑m−1k=0∑m−1[i>max(⌊acj+c−b−1⌋,⌊ack+c−b−1⌋)]i=0∑nj=0∑m−1k=0∑m−1[i>max(⌊acj+c−b−1⌋,⌊ack+c−b−1⌋)]nm2−j=0∑m−1k=0∑m−1max(⌊acj+c−b−1⌋,⌊ack+c−b−1⌋)nm2−2j=0∑m−1j⌊acj+c−b−1⌋−j=0∑m−1⌊acj+c−b−1⌋nm2−2g(c,c−b−1,a,m−1)−f(c,c−b−1,a,m−1)
推出来了。。。。。
然后我们来怼g
======g(a,b,c,n)i=0∑ni⌊cai+b⌋i=0∑ni⌊c(a%c)i+b%c+⌊ca⌋i+⌊cb⌋⌋i=0∑ni(⌊c(a%c)i+b%c⌋+⌊ca⌋i+⌊cb⌋)i=0∑ni⌊c(a%c)i+b%c⌋+i=0∑n⌊ca⌋i2+i=0∑n⌊cb⌋i6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋+i=0∑ni⌊c(a%c)i+b%c⌋g(a%c,b%c,c,n)+6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋
同理我们只关心第一项
==========g(a,b,c,n)i=0∑ni⌊cai+b⌋i=0∑n(ij=1∑m[⌊cai+b⌋≥j])i=0∑n(ij=0∑m−1[i>⌊acj+c−b−1⌋])i=0∑nj=0∑m−1i[i>⌊acj+c−b−1⌋]j=0∑m−1i=⌊acj+c−b−1⌋+1∑nij=0∑m−12(n+⌊acj+c−b−1⌋+1)∗(n−(⌊acj+c−b−1⌋+1)+1)j=0∑m−12(n+⌊acj+c−b−1⌋+1)∗(n−⌊acj+c−b−1⌋)j=0∑m−12n2−⌊acj+c−b−1⌋2+n−⌊acj+c−b−1⌋2n(n+1)m−2∑j=0m−1⌊acj+c−b−1⌋2−2∑j=0m−1⌊acj+c−b−1⌋2n(n+1)m−2h(c,c−b−1,a,m−1)−2f(c,c−b−1,a,m−1)
推完了总结一下
f(a,b,c,n)=i=0∑n⌊cai+b⌋h(a,b,c,n)=i=0∑n⌊cai+b⌋2g(a,b,c,n)=i=0∑ni⌊cai+b⌋f(a,b,c,n)=f(a%c,b%c,c,n)+2n(n+1)⌊ca⌋+(n+1)⌊cb⌋h(a,b,c,n)=h(a%c,b%c,c,n)+2⌊ca⌋g(a%c,b%c,c,n)+2⌊cb⌋f(a%c,b%c,c,n)+⌊ca⌋26n(n+1)(2n+1)+2⌊ca⌋⌊cb⌋2n(n+1)+(n+1)⌊cb⌋2g(a,b,c,n)=g(a%c,b%c,c,n)+6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋f(a,b,c,n)=nm−f(c,c−b−1,a,m−1)h(a,b,c,n)=nm2−2g(c,c−b−1,a,m−1)−f(c,c−b−1,a,m−1)g(a,b,c,n)=2n(n+1)m−2h(c,c−b−1,a,m−1)−2f(c,c−b−1,a,m−1)
void calfgh_baoli(ll a,ll b,ll c,ll n,ll&f,ll&g,ll&h){
f=g=h=0;
for(ll i=0;i<=n;i++) {
f+=(a*i+b)/c;
g+=i*((a*i+b)/c);
h+=((a*i+b)/c)*((a*i+b)/c);
}
}
void calfgh(ll a,ll b,ll c,ll n,ll&f,ll&g,ll&h){
ll A=a/c,B=b/c,s0=n+1,s1=n*(n+1)/2,s2=n*(n+1)*(2*n+1)/6;
f=s1*A+s0*B;
g=s2*A+s1*B;
h=s2*A*A+s0*B*B+2*s1*A*B-2*B*f-2*A*g;
a%=c,b%=c;
ll m=(a*n+b)/c;
if(m!=0) {
ll ff,gg,hh; calfgh(c,c-b-1,a,m-1,ff,gg,hh);
f+=n*m-ff;
g+=(n*m*(n+1)-hh-ff)/2;
h+=n*m*m-2*gg-ff;
}
h+=2*B*f+2*A*g;
}