题意

求 $\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: 模积和——整除分块的更多相关文章

  1. [Bzoj 2956] 模积和 (整除分块)

    整除分块 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\). 需要一种高效求得函数 \(f(i)\) 的前缀和的方法,比如等差等比数 ...

  2. BZOJ2956: 模积和(数论分块)

    题意 题目链接 Sol 啊啊这题好恶心啊,推的时候一堆细节qwq \(a \% i = a - \frac{a}{i} * i\) 把所有的都展开,直接分块.关键是那个\(i \not= j\)的地方 ...

  3. 【数论分块】bzoj2956: 模积和

    数论分块并不精通……第一次调了一个多小时才搞到60pts:因为不会处理i==j的情况,只能枚举了…… Description $\sum_{i=1}^{n}\sum_{j=1 \land i \not ...

  4. BZOJ2956: 模积和

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  5. bzoj2956: 模积和(数论)

    先算出无限制的情况,再减去i==j的情况. 无限制的情况很好算,有限制的情况需要将式子拆开. 注意最后的地方要用平方和公式,模数+1是6的倍数,于是逆元就是(模数+1)/6 #include<i ...

  6. BZOJ 2956 模积和(分块)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2956 [题目大意] 求∑∑((n%i)*(m%j))其中1<=i<=n,1 ...

  7. ACM学习历程—BZOJ2956 模积和(数论)

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  8. P2260 [清华集训2012]模积和

    P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...

  9. 【BZOJ2956】模积和 分块

    [BZOJ2956]模积和 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m ...

随机推荐

  1. (模板)hdoj1251(字典树模板题)

    题目链接:https://vjudge.net/problem/HDU-1251 题意:给定一系列字符串之后,再给定一系列前缀,对每个前缀查询以该字符串为前缀的字符串个数. 思路: 今天开始学字典树, ...

  2. php扩展安装方式

    目录 扩展安装 php源码编译安装 PEAR.PECL phpize 源码安装 扩展安装 以php安装swoole扩展为例. php源码编译安装 下载源码包并编译安装 $ wget http://cn ...

  3. php面向对象之封装

    OOP三大特性:封装.继承和多态,简称封继态. 封装 类2使用关键字extends继承类1,之后,类1为类2的父类,简称父类,类2是类1的子类,简称子类.使用关键字new,实例化类1,得到对象1,对象 ...

  4. docker 实践四:数据管理

    这篇是关于 docker 的数据管理. 注:环境为 CentOS7,docker 19.03. 一般容器中管理数据主要有两种方式: 数据卷(Data Volumes):容器内数据直接映射到本地主机环境 ...

  5. Windows上安装配置SSH教程(1)

    作者:feipeng8848 出处:https://www.cnblogs.com/feipeng8848/p/8559803.html 本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位 ...

  6. Jira是什么

    JIRA这个工具接触有好几年了,在多个海外项目上都用过这个工具.去年又在项目上深度使用后就有点爱不释手了,回国后也在找机会推荐给其它项目上用.最近正好有新项目需要用,借这个机会把JIRA的配置学习的过 ...

  7. BSGS和EXBSGS

    也许更好的阅读体验 \(Description\) 给定\(a,b,p\),求一个\(x\)使其满足\(a^x\equiv b\ \left(mod\ p\right)\) \(BSGS\) \(BS ...

  8. SringMVC笔记

    SpringMvc主要是三个Servlet:HttpServletBean,FramwworkServlet,DispatcherServlet,它们是依次继承的关系,其处理过程大致功能如下: 1.H ...

  9. 3_PHP表达式_5_数据类型转换_类型自动转换

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP类型转换分为类型自动转换和类型强制转换. 1.布尔型数据参与算数运算时,TRUE被转换为整数1,FALSE被 ...

  10. linux环境下jdk安装

    1,下载jdk版本 jdk-7u25-linux-x64.tar.gz  和windows jdk一致,jvm有区别: 2,拷贝到 /home目录下.通过tar -zxvf jdk-7u25-linu ...