tty的求助

问题描述

YL中学有一位叫做tty的土豪,他很有钱,而且实力非凡,才高八斗,玉树临 风,德才兼备,雄才大略,满腹经纶(此处省略1000字),(还是个大逗比)。因此有 很多妹子追求她,但是他都看丌上,他一心一意的爱着”唐诗“的好朋友**(具体叫 什么请自己脑补,我丌能说,丌然会被打。。。。。。)。”唐诗“的好朋友**眼界 也很高,而且很喜欢数学,所以出了一道math题目,如果tty能够回答出来的话就可 以得到 ** 的爱。 具体题目是这样的:求出

\sum_{n=1}^N\sum_{m=1}^M\sum_{k=0}^{k<m}\lfloor\frac{nk+x}{m}\rfloor

的值。其中 x 是实数,其他 的都是整数。 令人头疼的是,tty正好数学不好啊,为了他的终生幸福,所以他来求助了 你,请你帮他算出结果。

输入文件

输入仅有一行。

第一行仅有两个正整数N,M和一个实数x。

输出文件

输出共1行,由亍结果过大,所以请输出上式对998244353取模的结果。

样例输入

2 3 1

样例输出

7

样例解释

当n=1,m=1时,sum=1 
当n=1,m=2时,sum=1 
当n=1,m=3时,sum=1 
当n=2,m=1时,sum=1 
当n=2,m=2时,sum=1 
当n=2,m=3时,sum=2 
所以答案是7 
复制代码

数据规模

对于20%的数捤:N,M<=100

对于50%的数捤:N,M<=2000

对于100%的数捤:N,M<=500000,0<x<=100000,x精确到小数点后8位小数。

说实话,我其实是很不想帮这个忙的,但既然人家都求助了,我也不好拒绝(强装镇定)

题解

先解决一个简单粗暴的数学问题

对于给定的 n , m , x ,求出

\sum_{k=0}^{k<m}\lfloor\frac{nk+x}{m}\rfloor

转换一下

ans=\sum_{k=0}^{k<m}\lfloor\frac{nk\mod m+x}{m}\rfloor+\frac{nk}{m}-\frac{nk \mod m}{m}
\sum_{k=0}^{k<m}\frac{kn}{m}=\frac{(0+(m-1)n)m}{2m}=\frac{n(m-1)}{2}

然后有一个很玄学的结论,回头看了证明再来证明

结论:对于n,m:

0\mod m,n\mod m,2n\mod m,...,(m-1)n\mod m

若有

gcd(n,m)=d

则这个数列为

0,d,2d,...,m-d

的d次重复

因此,原式中

\sum_{k=0}^{k<m}\lfloor\frac{nk\mod m+x}{m}\rfloor=d\cdot\sum_{k=0}^{k<\frac{m}{d}}\lfloor\frac{kd+x}{m}\rfloor
\sum_{k=0}^{k<m}\lfloor\frac{nk\mod m+x}{m}\rfloor=d\cdot\sum_{k=0}^{k<\frac{m}{d}}\lfloor\frac{\frac{kd+x}{d}}{\frac{m}{d}}\rfloor=d\cdot\sum_{k=0}^{k<\frac{m}{d}}\lfloor\frac{k+\frac{x}{d}}{\frac{m}{d}}\rfloor

易得有

\sum_{k=0}^{k<A}\lfloor\frac{k+x}{A}\rfloor=\lfloor x\rfloor

使其中的 A=\frac{m}{d},x=\frac{x}{d},则易得

d\cdot\sum_{k=0}^{k<\frac{m}{d}}\lfloor\frac{k+\frac{x}{d}}{\frac{m}{d}}\rfloor=d\lfloor\frac{x}{d}\rfloor

而最后一部分

\sum_{k=0}^{k<m}\frac{nk \mod m}{m}=d\cdot\frac{(0+m-d)\frac{m}{d}}{2m}=\frac{m-d}{2}

所以结果就是

d=gcd(n,m)
ans=d\lfloor\frac{x}{d}\rfloor+\frac{(n-1)(m-1)}{2}+\frac{d}{2}

重新回到题目,就变成了

\sum_{n=1}^N\sum_{m=1}^Md\lfloor\frac{x}{d}\rfloor+\frac{(n-1)(m-1)}{2}+\frac{d}{2}

其中 d=gcd(n,m)

先把好求的求了

\sum_{n=1}^N\sum_{m=1}^M\frac{(n-1)(m-1)}{2}=\frac{(0+N-1)N(0+M-1)M}{2\cdot 2\cdot 2}=\frac{(N-1)(M-1)NM}{8}

然后比较不好求的 实际上我们只需要求出每一个 gcd(n,m)=d 的个数

G(d)d|gcd(n,m) 的数对 (n,m) 的个数

g(d)d=gcd(n,m) 的数对 (n,m) 的个数

G(d)=\lfloor\frac{n}{k}\rfloor\cdot\lfloor\frac{m}{k}\rfloor=\sum_{i=1}^{\lfloor\frac{min(n,m)}{k}\rfloor}g(d)
g(d)=\sum_{i=1}^{\lfloor\frac{min(n,m)}{k}\rfloor}G(id)=\sum_{i=1}^{\lfloor\frac{min(n,m)}{k}\rfloor}\mu(i)\cdot\lfloor\frac{n}{id}\rfloor\cdot\lfloor\frac{m}{id}\rfloor

然后就可以快速求出结果了

稍后附上代码

转载于:https://juejin.im/post/5a9542265188257a6e405c25

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值