十年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 ;
}

最新文章

  1. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
  2. POJ 2391 Ombrophobic Bovines
  3. Visual Studio 2015 Pre Secondary Installer 在哪里
  4. $.extend()的用法【转】
  5. imooc-java-作业练习-20150918
  6. JAVA的安装与软件使用
  7. tomcat6.0 数据库连接池配置问题
  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码]
  9. mongodb batchInsert
  10. 2017-06-22初识python
  11. 【DDD】领域驱动设计实践 —— 架构风格及架构实例
  12. iOS转场动画封装
  13. Spark源码剖析(九):TaskScheduler原理与源码剖析
  14. gradle 将依赖打入Jar包的方法
  15. 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序
  16. 求两个整数的最大公约数GCM
  17. dhcp服务器(一)
  18. Spark项目之电商用户行为分析大数据平台之(八)需求分析
  19. iOS开发:代码通用性以及其规范 第二篇(猜想iOS中实现TableView内部设计思路(附代码),以类似的思想实现一个通用的进度条)
  20. 20145316许心远《网络对抗》第一次实验拓展:shellcode注入+return-to-libc

热门文章

  1. 第十七章 程序管理与SELinux初探--进程、进程管理(ps、top)
  2. DDOS到底是什么,怎么预防,看看就明白了
  3. Unity Shader后处理-搜索灰度效果
  4. 008-Java的StringBuilder和StringBuffer
  5. 2018-2-13-win10-edge扩展
  6. Codeforces 1151E 统计贡献
  7. vue生态系统之vuex
  8. lombok @Builder实现原理
  9. Centos7.5 安装sonarqube-7.1
  10. Swift 环境搭建