学习类欧几里得算法,因为是蒟蒻,感觉网上很多都看不懂,所以自己写一篇快活快活


第一类求和式:

\(F(a,b,c,n)=\sum_{i=0}^n\lfloor\frac{a*i+b}{c}\rfloor\)


对于这样形式的求和,我们有以下的推导:

\(b>=c\)时,我们有:

\(\lfloor\frac{a}{c}\rfloor\),

\(\lfloor\frac{a\mod c}{c}\rfloor+\lfloor\frac{a}{c}\rfloor\),

于是对于原先的式子,我们可以推出:

\(F(a,b,c,d,n)=\sum_{i=0}^n\lfloor\frac{a*i+b}{c}\rfloor\) =\(\sum_{i=0}^n(\lfloor\frac{a\mod c*i+b\mod c}{c}\rfloor+\lfloor\frac{a*i}{c}\rfloor+\lfloor\frac{b}{c}\rfloor)\)

进一步化为递归的形式就是:

\(F(a\%c,b\%c,c,n)+\frac{(n+1)n}{2}*\lfloor\frac{a}{c}\rfloor+(n+1)*\lfloor\frac{b}{c}\rfloor\)

\(b<c\)时我们有:

我们观察可以很容易的发现,原先的和式的右边一大堆,去掉下取整实际上表示出来就是一条直线,即:

\(F=kx+b\),(\(k=\frac{a}{c},b=\frac{b}{c})\),

\(n\)时的值.我们要求定义域内函数值的和,自然就是求积分,也就是这个直角梯形的面积.然后加上下整除符号,我们需要求出的就是这个梯形内整点的个数.

我们枚举所有整点的纵坐标,就有:

\(F=\sum_{i=0}^{n}\sum_{j=1}^{m}[\lfloor\frac{a*i+b}{c}\rfloor>=j]\)

\(=\sum_{i=0}^{n}\sum_{j=0}^{m-1}[\lfloor\frac{a*i+b}{c}\rfloor>=j+1]\)

对于:

\([\lfloor\frac{a*i+b}{c}\rfloor>=j+1]\),

我们知道,大于等于去掉下整除依旧成立,于是

\(=\sum_{i=0}^{n}\sum_{j=0}^{m-1}[(\frac{a*i+b}{c})>=j+1]\)

\(b\)移过去:

\(=\sum_{i=0}^{n}\sum_{j=0}^{m-1}[a*i>=j*c+c-b]\)

\(a\)除过去:

\(=\sum_{i=0}^{n}\sum_{j=0}^{m-1}[i>=\frac{(j*c+c-b)}{a}]\)

\(\sum\)交换

\(=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i>=\frac{(j*c+c-b)}{a}]\)

\(=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i>\frac{(j*c+c-b-1)}{a}]\)

(分子减一,去掉等号)

\(sigma\):

\(=\sum_{j=0}^{m-1} n-\frac{(j*c+c-b-1)}{a}\)

(这个显然等价)

\(=n*m-\sum_{j=0}^{m-1} \frac{(j*c+c-b-1)}{a}\)

老规矩,转换成递归形式:

\(=n*m-F(c,c-b-1,a,m-1)\)

\(code:\)


inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b; } 
inline int sub(int a,int b){return a-b<0?a-b+mod:a-b;} 
inline int mul(ll a,ll b){return a*b<mod?a*b:a*b>=(mod<<1)?a*b%mod:a*b-mod;}

int likegcd(int a,int b,int c,int n) 
{ 
    if (!a) return 0; 
    if (a>=c||b>=c) { 
        int tmp=likegcd(a%c,b%c,c,n); 
        tmp=add(add(tmp,mul(mul(mul(n,n+1),inv[2]),a/c)),mul(n+1,b/c)); 
        return tmp; 
    } 
    // ll m=((ll)a*n+((ll)b)/(ll)c); 
    int f=(((ll)a*n)+b)/c; 
    // prllf("[%lld]",f%mod); 
    return sub(mul(n,f),likegcd(c,c-b-1,a,f-1)); 
}

(完)


(待补)

相关文章: