十年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] 模积和的更多相关文章

  1. 【BZOJ2956】模积和 分块

    [BZOJ2956]模积和 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m ...

  2. 【bzoj2956】模积和 数论

    题目描述 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. 输入 第一行两个数n,m. 输出 一个整数表示答案mod 1994041 ...

  3. 【数论分块】bzoj2956: 模积和

    数论分块并不精通……第一次调了一个多小时才搞到60pts:因为不会处理i==j的情况,只能枚举了…… Description $\sum_{i=1}^{n}\sum_{j=1 \land i \not ...

  4. BZOJ 2956 模积和 (数学推导+数论分块)

    手动博客搬家: 本文发表于20170223 16:47:26, 原地址https://blog.csdn.net/suncongbo/article/details/79354835 题目链接: ht ...

  5. BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块

    第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一 ...

  6. 51nod“省选”模测第二场 B 异或约数和(数论分块)

    题意 题目链接 Sol 这题是来搞笑的吧.. 考虑一个数的贡献是\(O(\frac{N}{i})\) 直接数论分块. #include<bits/stdc++.h> #define Pai ...

  7. BZOJ2956: 模积和

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  8. P2260 [清华集训2012]模积和 【整除分块】

    一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...

  9. P2260 [清华集训2012]模积和

    P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...

随机推荐

  1. ArabellaCPC 2019

    链接:http://codeforces.com/gym/102263 A: 签到题:A * B . B: 题意:类似取石子游戏,每个人可以取max(1, n(当前剩余) - k)个,最后取完的人赢, ...

  2. 剑指offer——64和为s的数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题解 ...

  3. [待解决]报错:JSON parse error: Unexpected character

    {"code":"9999","message":"JSON parse error: Unexpected character ...

  4. Python匿名函数(lambda函数)

    匿名函数 -- 一行函数 lambda -- 关键字 x是普通函数的形参(位置,关键字...)可以不接收参数(x可以不写) :x是普通函数的函数值(只能返回一个数据类型)(:x返回值必须写) 1)此函 ...

  5. WebServer Project-02-XML解析

    XML:Extensible Markup Language,可扩展标记语言,左卫门数据的一种存储格式或用于存储软件的参数,程序解析此配置文件,就可以达到不修改代码就能更改程序的目的. <?xm ...

  6. 笔记37 Spring Web Flow——流程的组件

    在Spring Web Flow中,流程是由三个主要元素定义的:状态.转移和 流程数据. 一.状态 Spring Web Flow定义了五种不同类型的状态.通过选择Spring Web Flow的状态 ...

  7. python+selenium遍历某一个标签中的内容

    一.python+selenium遍历某一个标签中的内容 举个例子:我要获取列表标签<li></li>的内容 根据python+selenium定位到列表整体,使用for循环获 ...

  8. dubbo入门之异步调用

    dubbo默认使用同步的方式调用.但在有些特殊的场景下,我们可能希望异步调用dubbo接口,从而避免不必要的等待时间,这时候我们就需要用到异步.那么dubbo的异步是如何实现的呢?下面就来看看这个问题 ...

  9. 再学 GDI+文本输出文本样式

    代码文件: unit Unit1; interfaceuses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls ...

  10. DLL劫持技术例子: HijackDll

    控制台程序:DllLoader Dll加载器,用于动态加载目标Dll,并动态调用目标函数 #include <cstdio> #include <windows.h> type ...