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 ...
随机推荐
- [.Net] 一句话Linq(递归查询)
功能查询起止日期范围内连续的月份列表. /* Period */ cbxPeriod.DataSource = Enumerable.Range(, ).Select(t => DateTime ...
- 《Mysql - Mysql 是如何保证高可用的?》
一:为什么要进行主备切换? - 比如软件升级.主库所在机器按计划下线等.主动运维. - 比如主库所在机器掉电,为了保证服务的正常运行,而进行切换.可能是被动操作. - 流程图 - 二:什么是同步延 ...
- 在CentOS下搭建GoLang开发环境
下载安装包 [vagrant@dk ~]$ wget http://mirrors.ustc.edu.cn/golang/go1.13.linux-amd64.tar.gz 使用USTC 中科大开源镜 ...
- UOJ #7 NOI2014购票(点分治+cdq分治+斜率优化+动态规划)
重写一遍很久以前写过的题. 考虑链上的问题.容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j ...
- Oracle触发器编译错误及解决方案
错误 TRIGGER **** 编译错误 错误:PLS-00103: 出现符号 "END"在需要下列之一时: ( begin case declare exit ...
- 遇到 GLFW 我的demo可以运行 但是公司的程序调用我的so运行不起来
//to do 原 因: 发现 自身demo的程序的shaders更新了 但是公司程序却没有更新 解决办法:更新公司程序的shaders 为最新版本 吸取的教训: 不仅仅要更新公司程序 ...
- 深入分析CAS
CAS,Compare And Swap,即比较并交换.Doug lea大神在同步组件中大量使用CAS技术鬼斧神工地实现了Java多线程的并发操作.整个AQS同步组件.Atomic原子类操作等等都是以 ...
- django.http.request中QueryDict 对象
在一个 HttpRequest 对象中, GET 和 POST 属性都是 django.http.QueryDict 的实例. QueryDict 是一个类似于字典的类,专门用来处理用一个键的多值.当 ...
- JS 客户端(浏览器)存储数据之 localStorage、sessionStorage和indexDB
基本概念 1.localStorage和sessionStorage是HTML5 Web存储的提供的两种存储方式,在IE7以上以及大多数浏览器都是支持的 2.localStorage和sessionS ...
- UI5-技术篇-SAP UI5数据表进行了比较:sap.m.Table与sap.ui.table.Table
https://a.kabachnik.info/sap.m.table-vs-sap.ui.table.table-features-compared.html SAP UI5数据表进行了比较:sa ...