「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\)的距离大于等 ...
随机推荐
- 3D Cube计算引擎加速运算
3D Cube计算引擎加速运算 华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore. 为什么要做达芬奇架构? AI将作为一项通用技术极大地提高生产力,改 ...
- 使用PCAST检测散度以比较GPU和CPU结果
使用PCAST检测散度以比较GPU和CPU结果 并行编译器辅助软件测试(PCAST)是英伟达HPC FORTRAN.C++和C编译器中的一个特性.PCAST有两个用例.一个新的处理器或新的编译程序的部 ...
- 深入理解java虚拟机笔记Chapter4
JDK命令行工具 其中的重中之重是 jstat 命令!而它最常用的参数就是 -gcutil,使用格式如下: jstat -gcutil [pid] [intervel] [count] 输出如下 D: ...
- 菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的 ...
- 【NX二次开发】Block UI 从列表选择部件
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- markdown写ppt (史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 【模拟8.03】斐波那契(fibonacci) (规律题)
就是找规律,发现每个父亲和孩子的差值都是距儿子最大的fibonacc 也是可证的 f[i]表示当前月的兔子总数 f[i]=f[i-1]+f[i-2](f[i-2]是新生的,f[i-1]是旧有的) 然后 ...
- 「模拟8.23」阴阳 DP
对于此题的性质我们考虑DP 分四种情况 黑色块在右侧单调降,单调升 还有在左侧 另外我们这样可能会记重,所以还要将重复记过的也就是边界线是横的和竖的 然后还要将全白全黑加上 1 #include< ...
- Spring Boot下的一种导出Excel文件的代码框架
1.前言 在Spring Boot项目中,将数据导出成Excel格式文件是常见的功能.与Excel文件导入类似,此处也用代码框架式的方式实现Excel文件导出,使得代码具有可重用性,并保持导出数据 ...
- String ,StringBuffer 与S tringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) ------------------------------------- ...