「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. 痞子衡嵌入式:改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常. 痞子衡的嵌入式技术交流群里有一位非常活跃的朋友(网名:文 ...

  2. python做反被爬保护的方法

    python做反被爬保护的方法 网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护.于是,很 ...

  3. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

  4. TVM在ARM GPU上优化移动深度学习

    TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率.但是,大 ...

  5. HiLink & LiteOS & IoT芯片 让IoT开发简单高效

    HiLink & LiteOS & IoT芯片让IoT开发简单高效 华为HiLink & LiteOS & IoT芯片使能三件套,让IoT开发更简单高效.下一代智能手机 ...

  6. NVIDIA深度学习Tensor Core性能解析(上)

    NVIDIA深度学习Tensor Core性能解析(上) 本篇将通过多项测试来考验Volta架构,利用各种深度学习框架来了解Tensor Core的性能. 很多时候,深度学习这样的新领域会让人难以理解 ...

  7. TensorFlow神经网络集成方案

    TensorFlow神经网络集成方案 创造张力流create_tensorflow_neuropod 将TensorFlow模型打包为neuropod包. create_tensorflow_neur ...

  8. JAVA并发(7)-并发队列PriorityBlockingQueue的源码分析

    本文讲PriorityBlockingQueue(优先阻塞队列) 1. 介绍 一个无界的具有优先级的阻塞队列,使用跟PriorityQueue相同的顺序规则,默认顺序是自然顺序(从小到大).若传入的对 ...

  9. 使用sign签名发送请求

    import CryptoJS from "crypto-js"; import urlencode from "urlencode"; methods:{ a ...

  10. jQuery04

    jQuery内容总结: 1.既然是一个js库,使用之前就要引入js库,是一个.js文件,版本是1.8.3: 2.写一个jQuery页面加载函数(注意与js页面加载函数的区别): $(function( ...