【BZOJ】2956: 模积和
题意
求\(\sum_{i=1}^{n} \sum_{j=1}^{m} (n \ mod \ i)(m \ mod \ j)[i \neq j] \ mod \ 19940417\), \((n, m \le 10^9)\)
分析
以下均设\(n \le m\)
$$
\begin{align}
&
\sum_{i=1}^{n} \sum_{j=1}^{m} (n \ mod \ i)(m \ mod \ j)[i \neq j] \ mod \ 19940417
\\
\equiv &
\left(
\sum_{i=1}^{n}
\sum_{j=1}^{m}
(n \ mod \ i)(m \ mod \ j)
\sum_{i=1}^{n}
(n \ mod \ i \cdot m \ mod \ i)
\right)
\ mod \ 19940417
\
\equiv &
\left(
\left(
\sum_{i=1}^{n}
(n \ mod \ i)
\right)
\left(
\sum_{j=1}^{m}
(m \ mod \ i)
\right)
\sum_{i=1}^{n}
(n \ mod \ i \cdot m \ mod \ i)
\right)
\ mod \ 19940417
\
\end{align}
于是我们只需要快速求出$\sum_{i=1}^{n} ( n \ mod \ i)$和$\sum_{i=1}^{n} ( n \ mod \ i \cdot m \ mod \ i )$就能解决问题了。
<p>
\]
\begin{align}
& \sum_{i=1}^{n} ( n \ mod \ i)
\
= &
\sum_{i=1}^{n}
\left( n - i \left \lfloor \frac{n}{i} \right \rfloor \right)
\
= &
n^2
\sum_{i=1}^{n}
i \left \lfloor \frac{n}{i} \right \rfloor
\
& \sum_{i=1}^{n} ( n \ mod \ i \cdot \ m \ mod \ i)
\
= &
\sum_{i=1}^{n}
\left( n - i \left \lfloor \frac{n}{i} \right \rfloor \right) \left( m - i \left \lfloor \frac{m}{i} \right \rfloor \right)
\
= &
n^2m
+
\sum_{i=1}^{n}
i^2 \left \lfloor \frac{n}{i} \right \rfloor \left \lfloor \frac{m}{i} \right \rfloor
n\sum_{i=1}^{n}
i \left \lfloor \frac{m}{i} \right \rfloor
m\sum_{i=1}^{n}
i \left \lfloor \frac{n}{i} \right \rfloor
\
\end{align}
## 题解
于是分块大法好...
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mo=19940417;
ll cal(int n, ll a) {
ll ret=a%mo*n%mo, tp=0;
for(int i=1, pos=0; i<=n; i=pos+1) {
pos=n/(n/i);
tp+=(a/i)%mo*(((ll)(pos+1)*pos/2-(ll)(i-1)*i/2)%mo)%mo;
if(tp>=mo) {
tp-=mo;
}
}
return (ret-tp+mo)%mo;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
if(n>m) {
swap(n, m);
}
printf("%lld\n", (cal(n, n)*cal(m, m)%mo-cal(n, (ll)n*m)+mo)%mo);
return 0;
}\]
【BZOJ】2956: 模积和的更多相关文章
- BZOJ 2956 模积和 (数学推导+数论分块)
手动博客搬家: 本文发表于20170223 16:47:26, 原地址https://blog.csdn.net/suncongbo/article/details/79354835 题目链接: ht ...
- BZOJ 2956 模积和
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2956 题意:给出n和m.计算: 思路: i64 n,m; i64 cal(i64 m,i ...
- [Bzoj 2956] 模积和 (整除分块)
整除分块 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\). 需要一种高效求得函数 \(f(i)\) 的前缀和的方法,比如等差等比数 ...
- BZOJ 2956 模积和(分块)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2956 [题目大意] 求∑∑((n%i)*(m%j))其中1<=i<=n,1 ...
- bzoj 2956: 模积和 ——数论
Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...
- 【BZOJ】2956:模积和
Time Limit: 10 Sec Memory Limit: 128 MB Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j ...
- 「BZOJ 2956」模积和
「BZOJ 2956」模积和 令 \(l=\min(n,m)\).这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即: \[\begin{aligned} &\sum_{i=1 ...
- BZOJ_2956_模积和_数学
BZOJ_2956_模积和_数学 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数 ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
随机推荐
- 谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针
参考:http://blog.163.com/liang_liu99/blog/static/88415216200952123412180/ 以下的介绍主要针对的是Delphi的面向对象的知识,可能 ...
- golang channel basic
package mainimport ( "fmt" "math/rand" "time")func main() { rand.Seed( ...
- phpcms v9最常用的22个调用代码
新源网络工作室友情总结phpcms v9最常用的22个调用代码: 调用最新文章,带所在版块{pc:get sql="SELECT a.title, a.catid, b.catid, b.c ...
- WPF 创建自定义窗体
在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用.但是这个窗体不能够自由的改变大小.今天的 ...
- NS 802.11函数分析(一)
recv函数有两个作用,不仅是接收其他节点发送的包,而且当节点接收到其他包的时候也会调用recv() 首先给出NS2中recv的源码,和一些注释: void Mac802_11::recv(Packe ...
- Bag-of-words模型
Bag-of-words模型是信息检索领域常用的文档表示方法.在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法.句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立 ...
- HorizontalScrollView
HorizontalScrollView 链接
- opengl常用函数
glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被 SwapBuffers拷贝的三角形 glAlphaFunc允许设置alpha检测功能 glAreTex ...
- Hadoop Mapreduce分区、分组、二次排序过程详解[转]
原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2) ...
- cdh环境下,spark streaming与flume的集成问题总结
文章发自:http://www.cnblogs.com/hark0623/p/4170156.html 转发请注明 如何做集成,其实特别简单,网上其实就是教程. http://blog.csdn.n ...