#莫比乌斯反演,整除分块#bzoj 2154 bzoj 2693 jzoj 1938 洛谷 1829 Crash的数字表格 or JZPTAB

本文主要是介绍#莫比乌斯反演,整除分块#bzoj 2154 bzoj 2693 jzoj 1938 洛谷 1829 Crash的数字表格 or JZPTAB,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j) i=1nj=1mlcm(i,j)


分析

原式= ∑ i = 1 n ∑ j = 1 m i j g c d ( i , j ) \sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)} i=1nj=1mgcd(i,j)ij
那么原式= ∑ d = 1 m i n ( n , m ) d × ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ [ g c d ( i , j ) = 1 ] × i × j \sum_{d=1}^{min(n,m)}d\times \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(i,j)=1]\times i\times j d=1min(n,m)d×i=1dnj=1dm[gcd(i,j)=1]×i×j
根据莫比乌斯反演可以得到原式= ∑ d = 1 m i n ( n , m ) d ∑ t = 1 m i n ( ⌊ n d ⌋ , ⌊ m d ⌋ ) t 2 μ ( t ) ∑ i = 1 ⌊ n d t ⌋ i ∑ j = 1 ⌊ m d t ⌋ j \sum_{d=1}^{min(n,m)}d\sum_{t=1}^{min(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)}t^2\mu(t)\sum_{i=1}^{\lfloor\frac{n}{dt}\rfloor}i\sum_{j=1}^{\lfloor\frac{m}{dt}\rfloor}j d=1min(n,m)dt=1min(dn,dm)t2μ(t)i=1dtnij=1dtmj
就可以预处理 t 2 μ ( t ) t^2\mu(t) t2μ(t),用整除分块求解,时间复杂度大概是 O ( n ) O(n) O(n)


代码

#include <cstdio>
#define rr register
#define min(a,b) ((a)<(b)?(a):(b))
#define res(n,m) ((1ll*n*(n+1)>>1)%mod*((1ll*m*(m+1)>>1)%mod)%mod)
using namespace std;
const int mod=20101009,M=10000010;
int n,m,v[M],prime[M],s[M],cnt;
inline void prepa(int N){s[1]=1;for (rr int i=2;i<=N;++i){if (!v[i]) s[i]=-1,v[i]=prime[++cnt]=i;for (rr int j=1;j<=cnt&&prime[j]*i<=N;++j){v[i*prime[j]]=prime[j];if (i%prime[j]) s[i*prime[j]]=-s[i];else break;}}for (rr int i=1;i<=N;++i) s[i]=1ll*i*i%mod*(s[i]+mod)%mod;for (rr int i=2;i<=N;++i) (s[i]+=s[i-1])%=mod;
}
inline signed answ(int n,int m){rr int ans=0,t=min(n,m);for (rr int l=1,r;l<=t;l=r+1){r=min(n/(n/l),m/(m/l));(ans+=1ll*(s[r]-s[l-1]+mod)*res(n/l,m/l)%mod)%=mod;}return ans;
}
inline signed solve(int n,int m){rr int ans=0,t;prepa(t=min(n,m)); for (rr int l=1,r;l<=t;l=r+1){r=min(n/(n/l),m/(m/l));(ans+=(1ll*(r-l+1)*(l+r)>>1)%mod*answ(n/l,m/l)%mod)%=mod;}return ans;
}
signed main(){scanf("%d%d",&n,&m);printf("%d",solve(n,m));return 0;
} 

这篇关于#莫比乌斯反演,整除分块#bzoj 2154 bzoj 2693 jzoj 1938 洛谷 1829 Crash的数字表格 or JZPTAB的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/698981

相关文章

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel