「BZOJ 2956」模积和

令 \(l=\min(n,m)\)。这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即:

\[\begin{aligned}
&\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}
\]

对于前半部分有:

\[\begin{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}
\]

两次整除分块计算即可。

对于后半部分有:

\[\begin{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」模积和的更多相关文章

  1. 「BZOJ 2534」 L - gap字符串

    「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \( ...

  2. 「BZOJ 4228」Tibbar的后花园

    「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...

  3. 「BZOJ 3645」小朋友与二叉树

    「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...

  4. 「BZOJ 4502」串

    「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段 ...

  5. 「BZOJ 4289」 PA2012 Tax

    「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...

  6. 【BZOJ】2956:模积和

    Time Limit: 10 Sec  Memory Limit: 128 MB Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j ...

  7. Solution -「BZOJ 3812」主旋律

    \(\mathcal{Description}\)   Link.   给定含 \(n\) 个点 \(m\) 条边的简单有向图 \(G=(V,E)\),求 \(H=(V,E'\subseteq E)\ ...

  8. 「BZOJ 1001」狼抓兔子

    题目链接 luogu bzoj \(Solution\) 这个貌似没有什么好讲的吧,直接按照这个给的图建图就好了啊,没有什么脑子,但是几点要注意的: 建双向边啊. 要这么写,中间还要写一个\(whil ...

  9. 「BZOJ 5188」「Usaco2018 Jan」MooTube

    题目链接 luogu bzoj \(Describe\) 有一个\(n\)个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你\(Q\)个询问,问你与点\(v\)的距离大于等 ...

随机推荐

  1. 将 maven repo 部署到 Gitlab

    为什么要将 maven repo 部署到 Gitlab 将 Maven artifacts 放在对应的项目仓库下,而不是专门再去建一个 Maven 仓库.这么做使用起来更方便,更易于管理. 借助 Gi ...

  2. python工业互联网应用实战17—前后端分离模式之django template vs jquery3

    上一章节我们完成了"CRUD"的后面3个功能点,新增由于改动较大我们专门增加本章来阐述,主要是完成技术栈切换后,会发现模板的代码判断过多,逻辑过于复杂.对未来存在的扩展和维护友好性 ...

  3. 深度学习加速器堆栈Deep Learning Accelerator Stack

    深度学习加速器堆栈Deep Learning Accelerator Stack 通用张量加速器(VTA)是一种开放的.通用的.可定制的深度学习加速器,具有完整的基于TVM的编译器堆栈.设计了VTA来 ...

  4. springboot注解之@ConditionalOnProperty

    最近在研究springboot的源码,看到很多@ConditionalOnXxx的注解,大概明白此注解的意思,就是判断条件,这个条件就是Xxx,例如ConditionalOnProperty就是判断配 ...

  5. 已经安装好了tensorboardX,任然报错 No module named ‘tensorboardX‘ ??

    问题: 1.在jupyter notebook网页版中已经使用命令pip install tensorboardX来安装tensorboardX包,但是运行程序时仍旧出现错误:No module na ...

  6. Floyd最短路及路径输出

    引例 下图表示城市之间的交通路网,线段上的数字表示费用.如图,求$V_{1}$→$V_{n}$最短路径长度及路径 样例数据 输入 10 0 2 5 1 0 0 0 0 0 0 0 0 0 0 12 1 ...

  7. WebRTC 传输安全机制第二话:深入显出 SRTP 协议

    通过 DTLS 协商后,RTC 通信的双方完成 MasterKey 和 MasterSalt 的协商.接下来,我们继续分析在 WebRTC 中,如何使用交换的密钥,来对 RTP 和 RTCP 进行加密 ...

  8. 如何下载安装Python

     github博客传送门 csdn博客传送门 如何下载安装python 第一步: 在python的官网下载python版本,需要下载对应版本(在计算机-属性中查看自己是32位操作系统还是64位操作系统 ...

  9. 关于spooling的一些理解

    spooling做了什么 1.将独占设备(打印机)虚拟化,变成一个逻辑上的共享设备. 怎么理解?虚拟化,通俗来讲,就是让单个资源仿似变成了多个资源. 以打印机为例,没有虚拟化之前,只能有一个进程申请到 ...

  10. 从菜鸟到大神:Java高并发核心编程(连载视频)

    任何事情是有套路的,学习是如此, Java的学习,更是如此. 本文,为大家揭示 Java学习的套路 背景 Java高并发.分布式的中间件非常多,网上也有很多组件的源码视频.原理视频,汗牛塞屋了. 作为 ...