【数论分块】[BZOJ2956、LuoguP2260] 模积和
十年OI一场空,忘记取模见祖宗
题目:
求$$\sum_{i=1}^{n}\sum_{j=1}^{m} (n \bmod i)(m \bmod i)$$
(其中i,j不相等)
暴力拆式子:
$$ANS=\sum_{i=1}^{n}\sum_{j=1}^{m} (n- \left \lfloor \frac{n}{i} \right \rfloor*i)(m- \left \lfloor \frac{m}{i} \right \rfloor*i)-\sum_{i=1}^{min(n,m)} (n- \left \lfloor \frac{n}{i} \right \rfloor *i)(m- \left \lfloor \frac{m}{i} \right \rfloor *i)$$
令$f(n)=\sum_{i=1}^{n} (n- \left \lfloor \frac{n}{i} \right \rfloor *i)$
令$g(n)=\sum_{i=1}^{n}(n- \left \lfloor \frac{n}{i} \right \rfloor *i)(m- \left \lfloor \frac{m}{i} \right \rfloor *i)$
不妨设n<=m
则有
$$ANS=f(n)*f(m)-g(n)$$
其中$$g(n)=\sum_{i=1}^{n} n*m-n*\sum_{i=1}^{n} \left \lfloor \frac{m}{i} \right \rfloor *i-m*\sum_{i=1}^{n} \left \lfloor \frac{n}{i} \right \rfloor *i+\sum_{i=1}^{n} \left \lfloor \frac{n}{i} \right \rfloor* \left \lfloor \frac{m}{i} \right \rfloor *i^2$$
且易有$$\sum_{i=1}^{n} i^2=\frac{n*(n+1)*(2*n+1)}{6}$$
预处理6在模19940417意义下的逆元(我用了exgcd)
然后用数论分块把上面一堆东西算一下即可
#include<bits/stdc++.h>
#define int long long
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int mod = ;
int n,m,k;
inline void Add(int &x,int y){x+=y;x%=mod;}
void exgcd(int a,int b,int &x,int &y){
if(b==)return x=,y=,void();
exgcd(b,a%b,x,y);
int t=x;x=y,y=t-a/b*y;
}int inv(int x){
int xx,y;
exgcd(,mod,xx,y);
xx=(xx%mod+mod)%mod;
return xx;
}const int inv6=inv();
int sum(int x){return (x)*(x+)%mod*(*x%mod+)%mod*inv6%mod;}
int query1(int l,int r){return ((sum(r)-sum(l-))%mod+mod)%mod;}
int query2(int l,int r){int ans=(r-l+)*(l+r)/;return ans%mod;}
int calc1(int n){
int ans=;
for(int i=,j,t;i<=n;i=j+){
j=n/(n/i);
t=n/i*(i+j)*(j-i+)/;
t%=mod;
Add(ans,t);
}ans=n*n%mod-ans;
ans=(ans%mod+mod)%mod;
return ans;
}int calc2(int k){
int ans=;
for(int i=,j,t;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
int s1=n*(m/i)%mod*query2(i,j)%mod;
int s2=m*(n/i)%mod*query2(i,j)%mod;
int s3=(n/i)*(m/i)%mod*query1(i,j)%mod;
Add(s1,s2);
Add(ans,s1);
ans-=s3;
ans=((ans)%mod+mod)%mod;
}return ans;
}
signed main(){
n=read(),m=read();
if(n>m)swap(n,m);
int ans=calc1(n)*calc1(m)%mod;
ans-=n*m%mod*n%mod;
ans=(ans%mod+mod)%mod;
ans+=calc2(n);
ans=(ans%mod+mod)%mod;
cout<<ans<<endl;
return ;
}
【数论分块】[BZOJ2956、LuoguP2260] 模积和的更多相关文章
- 【BZOJ2956】模积和 分块
[BZOJ2956]模积和 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m ...
- 【bzoj2956】模积和 数论
题目描述 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. 输入 第一行两个数n,m. 输出 一个整数表示答案mod 1994041 ...
- 【数论分块】bzoj2956: 模积和
数论分块并不精通……第一次调了一个多小时才搞到60pts:因为不会处理i==j的情况,只能枚举了…… Description $\sum_{i=1}^{n}\sum_{j=1 \land i \not ...
- BZOJ 2956 模积和 (数学推导+数论分块)
手动博客搬家: 本文发表于20170223 16:47:26, 原地址https://blog.csdn.net/suncongbo/article/details/79354835 题目链接: ht ...
- BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块
第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一 ...
- 51nod“省选”模测第二场 B 异或约数和(数论分块)
题意 题目链接 Sol 这题是来搞笑的吧.. 考虑一个数的贡献是\(O(\frac{N}{i})\) 直接数论分块. #include<bits/stdc++.h> #define Pai ...
- BZOJ2956: 模积和
Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...
- P2260 [清华集训2012]模积和 【整除分块】
一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
随机推荐
- leetcode 1041——困于环中的机器人
描述: 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方.机器人可以接受下列三条指令之一: "G":直走 1 个单位 "L":左转 90 度 &quo ...
- Asia Hong Kong Regional Contest 2019
A. Axis of Symmetry B. Binary Tree n 的奇偶性决定胜负. C. Constructing Ranches 路径上点权之和大于,极大值两倍,这是路径上点能拼出多边形的 ...
- hud 3183
题意:给出n个数字的字符串,要求你删除m个数字后,得到的数字最小. 分析:删除m个,就是选n-m个,而且,选的第一个数,肯定在(0—(n-m-1))中,第二个就在(第一个的下一位—(n-m-2)中.就 ...
- Excel_VBA 常用代码
单元格编辑后改变背景色(6号,355832828) Dim oldvalue As Variant Private Sub Worksheet_Change(ByVal Target As Range ...
- ES6数组Api扩充
1. Array.of( ); ----将一组数据转换成一个数组: const num=201314; const a=Array.of(num); console.log(a); //数组 ...
- 结对编程-Core 第12组 [pb15061359+pb15061351]
一.项目要求 1.输入题目数量,生成操作数为3~5个的四则运算题目 2.输入上限值控制生成的操作数的最大值以及结果的最大值 3.输入支持的操作符类型:加.减.乘.除.乘方.括号 4.输入支持的操作数类 ...
- 在IDEA中用Gradle构建项目时使用lombok以依赖出现出错
情景: 之情一直是使用Maven构建的项目并且导入依赖后都可以正常使用,但是在换成Gradle时出现了不论使用什么版本的lombok的依赖都会提示@Sl4j注解的log找不到,但是编辑界面是不会报错的 ...
- Linux系统的buff/cache缓存清理脚本
cacheClean.sh #!/bin/bash # 日期: # 作者: 黄慧丰/何鹏举 # 说明: fastdfs所在的linux系统的buffer cache过大, 且并没有有效的自动回收, 因 ...
- BCZM : 2.1
1.问题描述 实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数.例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2 2.分析与解法 解法1:利用十进制和二进制相互转化 ...
- mysql 的linux 忘记了密码
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...