246. 区间最大公约数

原题链接

区间修改操作之后,最大公约数无法维护,但是单点修改之后,最大公约数是可以维护的。

这里有一个蛮重要的结论。

注:(S)表示集合S的最大公约数。

(a1,a2,...an)=(a1,a2a1,a3a2,...,anan1)

证明:

da1,a2,...,an的一个公约数(注意,不是最大)。

所以d|a1,d|a2,...d|an

a1=k1da2=k2d

a1a2=k1dk2d=d(k1k2)

所以d|(a1a2)

同理可得,d也是a1,a2a1,...,anan1的一个公约数。

不妨令d=(a1,a2,...an),而最大公约数大于等于任何一个公约数。

所以(a1,a2,...an)(a1,a2a1,...,anan1)

类似地,令d=(a1,a2a1,...,anan1)

所以d|a1,d|a2a1,...,d|anan1

a1=k1d,a2a1=k2d

a2=(a2a1)+a1=k2d+k1d=(k1+k2)d,所以d|a2

同理,da1,a2,...,an的一个公约数。

又因为最大公约数大于任何一个公约数,所以:

(a1,a2,...,an)(a1,a2a1,...,anan1)

综上,(a1,a2,...,an)=(a1,a2a1,...,anan1)


回到原题,我们可以维护一个差分数列,这样[L,R]的最大公约数就是(aL,query([L+1,R])),而且只有单点修改,容易维护最大公约数,由于要用到原值,在维护一个区间和sum即可。

CODE

posted @   Zlc晨鑫  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示