题目描述

求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。

输入

第一行两个数n,m。

输出

一个整数表示答案mod 19940417的值

样例输入

3 4

样例输出

1


题解

数论+分块

由于直接求i≠j的情况比较难搞,所以我们可以先求出i可以等于j的和,然后再减去i等于j时的情况。

也就是求∑∑((n mod i)*(m mod j))-∑((n mod i)*(m mod i))。

然后再根据乘法分配律转化为∑(n mod i)*∑(m mod i)-∑((n mod i)*(m mod i))。

因为有n mod i = n-(n/i)*i(这里的除号均表示向下取整)。

所以∑(n mod i) = ∑(n-(n/i)*i) = n*n-∑((n/i)*i)。

这里n/i最多只有√n 种取值,我们可以分块来求,这里用到1,2,3,...,n的和。

后面一坨变为∑((n-(n/i)*i)*(m-(m/i)*i))=∑(nm-m*(n/i)*i-n/(m/i)*i+(n/i)*(m/i)*i^2)。

同样的方法处理,运用一下1^2,2^2,3^2,...,n^2的和。

最后减一下即可。

然而有一个问题,就是套用公式的时候需要除法,不能先取模,而不先取模还会爆long long。

好在除的数是固定的2和6,于是可以直接把mod开大6倍,最后再模回去即可。

#include <cstdio>
#include <algorithm>
#define MOD 119642502
using namespace std;
typedef long long ll;
ll sum1(ll p)
{
return p * (p + 1) % MOD / 2;
}
ll sum2(ll p)
{
return p * (p + 1) % MOD * (2 * p + 1) % MOD / 6;
}
ll calc1(ll n)
{
ll ans = n * n % MOD , i , last = 0;
for(i = 1 ; i <= n ; i = last + 1)
{
last = n / (n / i);
ans = (ans - (n / i) % MOD * (sum1(last) - sum1(i - 1) + MOD) % MOD + MOD) % MOD;
}
return ans;
}
ll calc2(ll n , ll m)
{
ll ans = n * m % MOD * min(n , m) % MOD , i , last = 0;
for(i = 1 ; i <= n && i <= m ; i = last + 1)
{
last = min(n / (n / i) , m / (m / i));
ans = (ans - m * (n / i) % MOD * (sum1(last) - sum1(i - 1) + MOD) % MOD
- n * (m / i) % MOD * (sum1(last) - sum1(i - 1) + MOD) % MOD
+ (n / i) * (m / i) % MOD * (sum2(last) - sum2(i - 1) + MOD) % MOD + 2 * MOD) % MOD;
}
return ans;
}
int main()
{
ll n , m;
scanf("%lld%lld" , &n , &m);
printf("%lld\n" , (calc1(n) * calc1(m) % MOD - calc2(n , m) + MOD) % (MOD / 6));
return 0;
}

【bzoj2956】模积和 数论的更多相关文章

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

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

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

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

  3. bzoj2956: 模积和(数论)

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

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

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

  5. BZOJ2956: 模积和

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

  6. BZOJ2956: 模积和——整除分块

    题意 求 $\sum_{i=1}^n \sum_{j=1}^m (n \ mod \ i)*(m \ mod \ j)$($i \neq j$),$n,m \leq 10^9$答案对 $1994041 ...

  7. bzoj 2956: 模积和 ——数论

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

  8. 【BZOJ2956】模积和 分块

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

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

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

随机推荐

  1. haproxy+keepalived主备与双主模式配置

    Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...

  2. python元组操作

    元组:(tuple)元素不可被修改,不能被增加或者删除 一般写元组的时候,建议在最后加上一个逗号 可以索引取值    可以切片取值 元组一级元素不可被修改,但是二级及以后可以被修改 count() 获 ...

  3. django 面试题

    面试题1:migrate怎么判断哪些迁移脚本需要执行: 他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移 ...

  4. 简易的vuex用法

    vuex是vue中用于管理全局状态的一个组件,用于不同组件之间的通信,下面将介绍它的简单用法 首先安装vue与vuex npm install vue npm install vuex --save ...

  5. 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】

    IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...

  6. Python学习:运算符

    简单运算符: +(加) 两个对象相加 -(减) 从一个数中减去另一个数,如果第一个操作数不存在,则假定为零 *(乘) 给出两个数的乘积,或返回字符串重复指定次数后的结果   Eg.'haha' * 3 ...

  7. ts packet解析

    (1)TS流是基于Packet的位流格式,每个包是188字节或者204字节(一般是188字节,204字节的格式仅仅是在188字节的Packet后部加上16字节的CRC数据,其他格式是一样的),整个TS ...

  8. react-router 4.0中跳转失灵

    在https://github.com/ReactTraining/history文档中,跳转是 用这种方法,但是,用了之后就存在这么一个问题,网址换了但是页面并没有刷新. 查了资料后,history ...

  9. java图片识别 [Tesseract-OCR]

    以下链接包含,安装包及程序运行需要的jar 包,中文资源包. 中文包使用方式:找到tessdata安装目录(我本地:C:\Program Files (x86)\Tesseract-OCR\tessd ...

  10. codevs 1214 线段覆盖/1643 线段覆盖 3

    1214 线段覆盖/1214 线段覆盖  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 给定x轴上的N(0< ...