「BZOJ 2956」模积和
「BZOJ 2956」模积和
令 \(l=\min(n,m)\)。这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即:
&\sum_{i=1}^{n}\sum_{j=1,i\neq j}^{m}(n \bmod i)(m\bmod j)\\
=&\sum_{i=1}^{n}\sum_{j=1}^{m}(n \bmod i)(m\bmod j)-\sum_{i=1}^{\texttt{l}}(n \bmod i)(m\bmod i)\\
\end{aligned}
\]
对于前半部分有:
&\sum_{i=1}^{n}\sum_{j=1}^{m}(n \bmod i)(m\bmod j)\\
=&\sum_{i=1}^{n}\sum_{j=1}^{m}(n -\lfloor \frac n i \rfloor*i)(m -\lfloor \frac m j \rfloor*j)\\
=&\sum_{i=1}^{n}(n -\lfloor \frac n i \rfloor*i)\sum_{j=1}^{m}(m -\lfloor \frac m j \rfloor*j)\\
=&(n^2-\sum_{i=1}^{n}\lfloor \frac n i \rfloor*i)(m^2-\sum_{j=1}^{m}\lfloor \frac m j \rfloor*j)\\
\end{aligned}
\]
两次整除分块计算即可。
对于后半部分有:
&\sum_{i=1}^{l}(n \bmod i)(m\bmod i)\\
=&\sum_{i=1}^{l}(n -\lfloor \frac n i \rfloor*i)(m -\lfloor \frac m i \rfloor*i)\\
=& lnm-n\sum_{i=1}^{l}\lfloor \frac m i \rfloor*i-m\sum_{i=1}^{l}\lfloor \frac n i \rfloor*i+\sum_{i=1}^{l}i^2\lfloor \frac n i \rfloor\lfloor \frac m i \rfloor
\end{aligned}
\]
根据我们小学二年级就学过的知识可以知道序列 \(1^2,2^2,...,n^2\) 的前缀和为 \(\frac{n(n+1)(2n+1)}{6}\)。
故对于后面三个部分每个部分做一次整除分块即可。
除以 \(6\) 可能需要分开除,否则可能会爆。
贴个真的很丑的代码:
/*---Author:HenryHuang---*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll p=19940417;
ll sum(ll n){
ll a=n,b=n+1,c=2*n+1;
if(a%2==0) a/=2;
else b/=2;
if(a%3==0) a/=3;
else if(b%3==0) b/=3;
else c/=3;
return a*b%p*c%p;
}
ll gt(ll n,ll k){
ll ans=0;
ll l,r;
for(l=1;l<=n;l=r+1){
if(l<=k) r=min(n,k/(k/l));
else r=n;
ans+=(k/l)*(l+r)*(r-l+1)/2;
}
return ans%p;
}
ll solve(ll lim,ll n,ll m){
ll ans=0;
ll l,r;
for(l=1;l<=lim;l=r+1){
if(l<=lim) r=min(lim,min(n/(n/l),m/(m/l)));
else r=lim;
(ans+=(n/l)*(m/l)%p*(sum(r)-sum(l-1)+p)%p)%p;
}
return ans%p;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
ll n,m;cin>>n>>m;
ll lim=min(n,m);
ll Ans=(n*n%p-gt(n,n)+p)%p*(m*m%p-gt(m,m)+p)%p;
Ans-=lim*n%p*m%p;
Ans=(Ans+p)%p;
(Ans+=n*gt(lim,m)%p)%=p;
(Ans+=m*gt(lim,n)%p)%=p;
cout<<(Ans-solve(lim,n,m)+p)%p<<'\n';
return 0;
}
「BZOJ 2956」模积和的更多相关文章
- 「BZOJ 2534」 L - gap字符串
「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \( ...
- 「BZOJ 4228」Tibbar的后花园
「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...
- 「BZOJ 3645」小朋友与二叉树
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...
- 「BZOJ 4502」串
「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段 ...
- 「BZOJ 4289」 PA2012 Tax
「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...
- 【BZOJ】2956:模积和
Time Limit: 10 Sec Memory Limit: 128 MB Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j ...
- Solution -「BZOJ 3812」主旋律
\(\mathcal{Description}\) Link. 给定含 \(n\) 个点 \(m\) 条边的简单有向图 \(G=(V,E)\),求 \(H=(V,E'\subseteq E)\ ...
- 「BZOJ 1001」狼抓兔子
题目链接 luogu bzoj \(Solution\) 这个貌似没有什么好讲的吧,直接按照这个给的图建图就好了啊,没有什么脑子,但是几点要注意的: 建双向边啊. 要这么写,中间还要写一个\(whil ...
- 「BZOJ 5188」「Usaco2018 Jan」MooTube
题目链接 luogu bzoj \(Describe\) 有一个\(n\)个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你\(Q\)个询问,问你与点\(v\)的距离大于等 ...
随机推荐
- 开源项目核心商城(CoreShop)
帮小伙伴推一下他的开源项目作者是@大灰灰 核心商城(CoreShop)Beta 支持可视化布局的.Net小程序商城 [,Mask R-CNN(2019),PolarMask(2020)
CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)1. 目标检测:FCOS(CVPR 2019)目标检测算法FCOS(FCOS: ...
- TensorFlow编程结构
TensorFlow编程结构 TensorFlow 与其他编程语言非常不同. 首先通过将程序分为两个独立的部分,构建任何拟创建神经网络的蓝图,包括计算图的定义及其执行.起初这对于传统程序员来说看起来很 ...
- 单点突破:MySQL之基础
前言 开发环境:MySQL5.7.31 本文并不是mysql语法语句的教程或者笔记,如果初学MySQL,想要看sql的教程或者学习各种语法语句规范,可以看看一千行MySQL学习笔记或者MySQL教程| ...
- Java面试必知必会:基础
面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力.但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点. 一.基础 包括: 杂七杂八 面向对象 数 ...
- Python小白的数学建模课-07 选址问题
选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型. 小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型. 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法. ...
- 十、使用Varnish加速Web
使用Varnish加速Web 构建Web服务器(web1) [root@web1 ~]# yum -y install httpd [root@web1 ~]# systemctl start ...
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- centos7安装kubernetes1.18.5
一.设置hosts 修改主机名 [root@localhost kubernetes]# hostnamectl set-hostname master69 四台服务器安装kebernetes,一个m ...
- 番外篇:使用nssm工具将ES、Kibana、Logstash或者其他.bat文件部署为Windows后台服务的方法
使用NSSM工具安装bat文件为Windows服务 nssm是一个可以把bat批处理文件部署为Windows服务的小工具.例如很多.net项目可能还是在Windows服务器上面跑的,但是很多组件只提供 ...