题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=2154

题解:

莫比乌斯反演。

题意还是很清楚的,就不赘述了。

显然有

$ANS=\sum_{i=1\;j=1}^{n\;m} lcm(i,j)$

化为较为熟悉的gcd形式:

$\quad\quad=\sum_{i=1\;j=1}^{n\;m} \frac{i \times j}{gcd(i,j)}$

令$g$为gcd的值,$F(n,m)=\sum i\times j,满足1\leq i \leq \lfloor \frac{n}{g}\rfloor,1\leq j \leq \lfloor \frac{m}{g} \rfloor,且gcd(i,j)=1$

那么,$ANS=\sum_{g=1}^{min(n,m)} g\times F(n,m)$

如果已知$F(n,m)$的值,那么ANS就可以在$O\sqrt N$的复杂度内求出。


接下来看看对于一个确定的g,$F(n,m)$怎么求

即我们要求满足$1\leq i \leq \lfloor \frac{n}{g}\rfloor,1\leq j \leq \lfloor \frac{m}{g} \rfloor$,且$gcd(i,j)=1$的所有$i \times j$的和

还记得这个题么?●HDU 1695 GCD,让求的是满足上述条件的$(i,j)$的对数。

我们仍可以类似地去求:(令$x=\lfloor \frac{n}{g}\rfloor,y=\lfloor \frac{m}{g} \rfloor$)

令$t(k)为gcd(i,j)=k的i\times j的和$

$T(k)为gcd(x,y)=\lambda k的i\times j的和$

显然$T(k)=\sum_{k|d}{f(d)}$,即T为t的倍数关系和函数

考虑一下如何计算T(k)。

首先i的取值有:$k,2k,3k,\cdots,\lfloor \frac{x}{k} \rfloor k$

首先j的取值有:$k,2k,3k,\cdots,\lfloor \frac{y}{k} \rfloor k$

任意的两两组合都是T(k)的一部分。

令$sum(a,b)=\frac{(1+a)a}{2}\times\frac{(1+b)b}{2}$

所以$T(k)=k^2\times sum(\lfloor \frac{x}{k} \rfloor,\lfloor \frac{y}{k} \rfloor)$

那么由莫比乌斯反演公式的形式二(倍数关系那个式子):

$t(k)=\sum_{k|d}\mu(\frac{d}{k})T(d)$

$\quad\quad=\sum_{k|d}\mu(\frac{d}{k})d^2\times sum(\lfloor \frac{x}{d} \rfloor,\lfloor \frac{y}{d} \rfloor)$

而我们要求的是t(1),所以

$t(1)=\sum_{d=1}^{min(\lfloor \frac{n}{g}\rfloor,\lfloor \frac{m}{g}\rfloor)}\mu(d)d^2\times sum(\lfloor \frac{x}{d} \rfloor,\lfloor \frac{y}{d} \rfloor)$

显然,这个式子也可以在$O\sqrt N$的复杂度内求出。

所以综上,时间复杂度为$O(N)$

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 10000050
using namespace std;
const int mod=20101009;
int mu[MAXN],pmui2[MAXN];
void Sieve(int n){
static bool np[MAXN];
static int prime[MAXN],pnt;
mu[1]=pmui2[1]=1;
for(int i=2;i<=n;i++){
if(!np[i]) prime[++pnt]=i,mu[i]=-1;
for(int j=1;j<=pnt&&i<=n/prime[j];j++){
np[i*prime[j]]=1;
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
else{mu[i*prime[j]]=0; break;}
}
pmui2[i]=(pmui2[i-1]+1ll*mu[i]*i%mod*i%mod)%mod;
}
}
int sum(int n,int m){
return (1ll*(1+n)*n/2%mod)*(1ll*(1+m)*m/2%mod)%mod;
}
int F(int n,int m){
int mini=min(n,m),ret=0;
for(int d=1,last;d<=mini;d=last+1){
last=min(n/(n/d),m/(m/d));
ret=(1ll*ret+1ll*(pmui2[last]-pmui2[d-1]+mod)%mod*sum(n/d,m/d)%mod)%mod;
}
return ret;
}
int main(){
int n,m,mini,ans=0;
scanf("%d%d",&n,&m); mini=min(n,m);
Sieve(mini);
for(int g=1,last;g<=mini;g=last+1){
last=min(n/(n/g),m/(m/g));
ans=(1ll*ans+1ll*(g+last)*(last-g+1)/2%mod*F(n/g,m/g)%mod)%mod;
}
printf("%d\n",(ans+mod)%mod);
return 0;
}

  

●BZOJ 2154 Crash的数字表格的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  2. [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

    题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑N​y=1∑M​lim(x, ...

  3. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

  4. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  5. Bzoj 2154: Crash的数字表格(积性函数)

    2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least ...

  6. bzoj 2154 Crash的数字表格(莫比乌斯反演及优化)

    Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...

  7. 【刷题】BZOJ 2154 Crash的数字表格

    Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...

  8. BZOJ 2154 Crash的数字表格

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2154 题意: 思路: i64 mou[N]; void init(int N){    ...

  9. BZOJ 2154 Crash的数字表格 ——莫比乌斯反演

    求$\sum_{i=1}^n\sum_{j=1}^n lcm(i,j)$ 枚举因数 $ans=\sum_{d<=n} F(d) * d$ $F(d)$表示给定范围内两两$\sum_{gcd(i, ...

随机推荐

  1. C语言--函数嵌套

    一.实验作业 注意: 1.可以先初始化2个结构体数组数据以便测试. 2.要求用模块化方式组织程序结构,合理设计各自定义函数.同时,程序能够进行异常处理,检查用户输入数据的有效性,用户输入数据有错误,如 ...

  2. 简单的C语言编译器--语义制导翻译

      语法分析是最难写的,而这部分确实最伤脑的.大量的语义动作分析差点把我逼疯.   简而言之,这部分的作用就是在每次归约之后,都进行一些语义动作,最终让我们得到测试程序的三地址码,即中间代码. 1. ...

  3. 服务器数据恢复_Linux网站服务器故障数据恢复案例

    [数据恢复故障描述] 一台linux网站服务器,DELL R200,管理约50个左右网站,使用一块SATA 160GB硬盘.正常使用中突然宕机,尝试再次启动失败,将硬盘拆下检测时发现存在约100个坏扇 ...

  4. 新手入门 git

    Git是目前世界上最先进的分布式版本控制系统 特点:高端大气上档次 什么是版本控制系统 系统自动记录文件改动 方便同事协作管理 不用自己管理一堆类似的文件了,也不需要把文件传来传去.如果想查看某次改动 ...

  5. token 验证

    组件: https://jwt.io/#libraries-io

  6. JAVA工程师面试题【来自并发编程网】

    基础题: Java线程的状态 进程和线程的区别,进程间如何通讯,线程间如何通讯 HashMap的数据结构是什么?如何实现的.和HashTable,ConcurrentHashMap的区别 Cookie ...

  7. Tomcat(1-1)重置Tomcat8.5管理员的用户名和密码

    1.访问 http://localhost:8080/,点击 [manager app],提示输入用户名和密码,admin/admin后报错.  2.解决办法:重置Tomcat8.5管理员的用户名和密 ...

  8. C++中友元

    一.友元分为两种 1.友元函数 2.友元类 二.解析比较好的博客:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.htm ...

  9. golang-在gin中cookie跨域设置(配合ajax)

    1.当我在golang中,在前后端分离的情况下使用cookies时发现,跨域没有被允许.代码如下: func AccessJsMiddleware() gin.HandlerFunc { return ...

  10. 27.C++- 智能指针

    智能指针 在C++库中最重要的类模板之一 智能指针实际上是将指针封装在一个类里,通过对象来管理指针. STL中的智能指针auto_ptr 头文件: <memory> 生命周期结束时,自动摧 ...