BZOJ2956: 模积和——整除分块
题意
求 $\sum_{i=1}^n \sum_{j=1}^m (n \ mod \ i)*(m \ mod \ j)$($i \neq j$),$n,m \leq 10^9$答案对 $19940417$ 取模。
分析:
由于取模可化成取整的形式,$k \ mod \ i = k - \left \lfloor \frac{k}{i} \right \rfloor * i$,详见BZOJ1257 余数之和。
易知,$\sum_{i=1}^n \sum_{j=1}^m (n \ mod \ i)*(m \ mod \ j) = \sum_{i=1}^n(n \ mod \ i)\sum_{j=1}^m(m \ mod \ j)$
所以答案为两部分余数和的乘积减去 $i$ 等于 $j$ 的情况,
当 $i=j$ 时,
$$
\begin{aligned}
\sum_{i=1}^{min(n,m)}(n \ mod \ i)(m \ mod \ i) & = \sum_{i=1}^{min(n,m)}(n - \left \lfloor \frac{n}{i} \right \rfloor i)(m - \left \lfloor \frac{m}{i} \right \rfloor i) \\
&= \sum_{i=1}^{min(n,m)}(nm - m\left \lfloor \frac{n}{i} \right \rfloor i - n\left \lfloor \frac{m}{i} \right \rfloor i + \left \lfloor \frac{n}{i} \right \rfloor \left \lfloor \frac{m}{i} \right \rfloor i^2) \\
\end{aligned}$$
代码:
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll mod = ;
const ll inv6 = ;
ll n, m; //\sum_1^n [k/i]*i
ll S1(ll n, ll k)
{
ll ret = ;
if(k <= n) //需要分类讨论
{
for(ll i = ,j;i <= k;i = j+)
{
j = k / (k / i); ret = (ret + (i+j) * (j-i+) / % mod * (k / i) % mod) % mod;
}
}
else
{
for(ll i = ,j;i <= n;i = j+)
{
j = min(k / (k / i), n);
ret = (ret + (i+j) * (j-i+) / % mod * (k / i) % mod) % mod;
}
} return ret;
} ll S2(ll n)
{
n %= mod;
return n * (n+) % mod * (*n+) % mod * inv6 % mod;
} //[n/i][m/i]i^2
ll S3(ll n, ll m)
{
ll ret = ;
for(ll i = ,j;i <= min(n, m);i = j+)
{
j = min(n/(n/i), m/(m/i));
ret = (ret + (n/i) * (m/i) % mod * (S2(j) - S2(i-)) % mod) % mod;
}
return ret;
} int main()
{
scanf("%d%d", &n, &m);
if(m > n) swap(n, m);
ll ans = ;
ans = ans * (n*n%mod - S1(n, n) + mod) % mod;
ans = ans * (m*m%mod - S1(m, m) + mod) % mod;
ll ans2 = n *m % mod * m % mod;
ans2 = (ans2 - m * S1(m, n) % mod) % mod;
ans2 = (ans2 - n * S1(m, m) % mod) % mod;
ans2 = (ans2 + S3(n, m)) % mod;
//printf("%lld %lld\n", ans, ans2);
printf("%lld\n", (ans - ans2 + *mod) % mod);
return ;
}
参考链接:https://www.cnblogs.com/henry-1202/p/10201032.html
BZOJ2956: 模积和——整除分块的更多相关文章
- [Bzoj 2956] 模积和 (整除分块)
整除分块 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\). 需要一种高效求得函数 \(f(i)\) 的前缀和的方法,比如等差等比数 ...
- BZOJ2956: 模积和(数论分块)
题意 题目链接 Sol 啊啊这题好恶心啊,推的时候一堆细节qwq \(a \% i = a - \frac{a}{i} * i\) 把所有的都展开,直接分块.关键是那个\(i \not= j\)的地方 ...
- 【数论分块】bzoj2956: 模积和
数论分块并不精通……第一次调了一个多小时才搞到60pts:因为不会处理i==j的情况,只能枚举了…… Description $\sum_{i=1}^{n}\sum_{j=1 \land i \not ...
- BZOJ2956: 模积和
Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...
- bzoj2956: 模积和(数论)
先算出无限制的情况,再减去i==j的情况. 无限制的情况很好算,有限制的情况需要将式子拆开. 注意最后的地方要用平方和公式,模数+1是6的倍数,于是逆元就是(模数+1)/6 #include<i ...
- BZOJ 2956 模积和(分块)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2956 [题目大意] 求∑∑((n%i)*(m%j))其中1<=i<=n,1 ...
- ACM学习历程—BZOJ2956 模积和(数论)
Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
- 【BZOJ2956】模积和 分块
[BZOJ2956]模积和 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m ...
随机推荐
- Nginx里的root/index/alias/proxy_pass的意思
1.[alias] 别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向[alias]配置的路径.如: location /test/ { alias /home/sftp/i ...
- nohup 后台运行脚本,且可以实时查看日志
-u加在python上 python命令加上-u(unbuffered)参数后会强制其标准输出也同标准错误一样不通过缓存直接打印到屏幕. 这是因为python的缓存机制所决定的 如果是使用 nohup ...
- Python-03-流程控制
一.if判断语句 1. if...else if 条件: 满足条件时要做的事情1 满足条件时要做的事情2 ...... else: 不满足条件时要做的事情1 不满足条件时要做的事情2 ...... # ...
- nfs挂载文件
1. 安装必备插件 以防centos7默认没有启动nfs服务 yum -y install nfs-utils rpcbind # 启动 rpcbind 和配置开机自启动 systemctl sta ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- Oracle触发器编译错误及解决方案
错误 TRIGGER **** 编译错误 错误:PLS-00103: 出现符号 "END"在需要下列之一时: ( begin case declare exit ...
- 【转载】C#使用is关键字检查对象是否与给定类型兼容
在C#的编程开发过程中,很多时候涉及到数据类型的转换,如果强行转换数据类型,有时候可能会出现程序运行时错误,C#语言中提供了is关键字可以检查对象是否与给定类型兼容,可先判断类型兼容后再进行对象的转换 ...
- 【转载】Asp.Net中Cookie对象的作用以及常见属性
Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...
- 关于Vue-ElementUI修改默认样式不成功问题解决
Element是一个很好用的组件库,但是有时候我们需要修改一些组件的样式以满足我们自己的需求. 我们用浏览器调试找到相应的class,在本地重写这个class时,发现修改不成功. 这是因为在Vue文件 ...
- FICO-错误日志集
1.F-02报错 System error in routine FI_TAX_CHK_PRICING_DATA error code 13 function builder TAX2 程序 FI_T ...