原题链接https://www.luogu.org/problem/show?pid=1890

  1. 暴力中的暴力。
    对于每一组询问l..r,我们先循环暴力枚举l..r中最大值到1,再暴力循环l..r的每一个数,判断前一重循环能否整除后一重,如果全部都能,则可判定它就是l..r的最大公因数。
    时间复杂度\(O(mn*maxnum)\)。如果带入如果带入极值,需要执行\(10^{18}\)次。果断超时。

  2. 稍微优化的暴力。
    对于每一组询问,我们循环l..r的每一个数,然后再像这样:ans=gcd(ans,a[i]);。ans初值为a[l]。
    这样的时间复杂度\(O(mn*logmaxnum)\)。代入极值:\(1000*1000000*30=3*10^{10}\)。还是会超时.

核心代码:

ans=a[l];
for(int j=l;j<=r;++j)ans=gcd(ans,a[j]);

3.动态规划
设f[i][j]表示a[i..j]的最大公因数,则我们有状态转移方程:
\[f[i][j]=gcd(f[i][j-1],a[j])\]
这个方程是十分好推的。初值是这样的:
\[f[i][i]=a[i]\]
计算dp的时间是\(O(n^2)\),回答询问要\(O(1)\),共m次询问,有\(O(n^2+m)\)的总时间复杂度。最多需要执行\(2*10^6\)次。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define rep(i,a,n) for(register int i=(a);i<=(n);++i)
#define per(i,a,n) for(register int i=(a);i>=(n);--i)
#define fec(i,x) for(register int i=head[x];i;i=Next[i])
#define debug(x) printf("debug:%s=%d\n",#x,x)
#define mem(a,x) memset(a,x,sizeof(a))
template<typename A>inline void read(A&a){a=0;int f=1,c=0;while(c<'0'||c>'9'){c=getchar();if(c=='-')f*=-1;}while(c>='0'&&c<='9'){a=a*10+c-'0';c=getchar();}a*=f;}
template<typename A,typename B>inline void read(A&a,B&b){read(a);read(b);}
template<typename A,typename B,typename C>inline void read(A&a,B&b,C&c){read(a);read(b);read(c);}
template<typename A>A gcd(const A&m,const A&n){return m%n==0?n:gcd(n,m%n);}const int maxn=1000+7;
int n,m,a[maxn],f[maxn][maxn],l,r;void dp(){rep(i,1,n)rep(j,i+1,n)f[i][j]=gcd(f[i][j-1],a[j]);
}void Init(){read(n,m);rep(i,1,n)read(a[i]),f[i][i]=a[i];
}void Work(){dp();rep(i,1,m){read(l,r);printf("%d\n",f[l][r]);}
}int main(){Init();Work();return 0;
} 

转载于:https://www.cnblogs.com/hankeke/p/Luogu1890-gcd.html

[Luogu1890]gcd区间相关推荐

  1. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...

  2. BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)

    传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Dis ...

  3. Codeforces 359D Pair of Numbers | 二分+ST表+gcd

    题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间 ...

  4. 最大公约数gcd函数简介

    gcd函数简介 最大公因数(英语:highest common factor,hcf)也称最大公约数(英语:greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大 ...

  5. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  6. 学习手记(2019/7/05~2019/8/31)——快乐暑假

    文章目录 二分答案的作用 堆和区间 很糙ddp 线段树合并 网络流结论の1 树上莫队 对角线与GCD 区间与扫描线与方案数 欧拉欧拉*1 斯坦纳树 切比雪夫距离 二分匹配结论の1 min-max容斥 ...

  7. HDU5726(RMQ二分)

    GCD Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status D ...

  8. 个人题库--不怕万人阻挡,就怕自己投降

    只有逆着光,才能看见光 追光的人,终会光芒万丈 努力和后悔,哪个更痛苦? 最怕碌碌无为,又不思进取 再糟糕的过去,那也只是曾经 总有人会成功,为什么不是你? 你颓废的时候多少人用来拼命 你没有变强,因 ...

  9. Luogu T9376 区间GCD

    题目背景 无 题目描述 给定一长度为n的动态序列,请编写一种数据结构,要求支持m次操作,包括查询序列中一闭区间中所有数的GCD,与对一闭区间中所有数加上或减去一个值. 输入输出格式 输入格式: 第1行 ...

最新文章

  1. python连接数据库示例(东西写得很详细,剽过来了)
  2. Elasticsearch安装(Linux)
  3. iis7php怎么301重定向,iis7/8设置网站301重定向的方法
  4. 记一次ST-LINK维修及刷固件过程
  5. 安装Sublime Text 3插件的方法
  6. apache做yum源_svn+apache的yum源安装方式
  7. 字体怎么安装到vivo_老人用手机遇到操作麻烦?vivo远程协助及时解决问题
  8. 2022全开源企业发卡网修复短网址等BUG_2022企业级多商户发卡平台源码
  9. 抖音文字时钟壁纸html,抖音文字时钟app
  10. C语言:鸡兔同笼问题(基础代码)
  11. 2022年陕西中级审计师考试练习题及答案
  12. C语言怎么用键盘复制,怎样复制粘贴,复制粘贴的快捷键.docx
  13. 陆面生态水文模拟与多源遥感数据同化技术
  14. unity疯狂牧场完整项目源码 - Frenzy Farming time management game kit V1.0
  15. 用中文把玩Google开源的Deep-Learning项目word2vec
  16. arp欺骗和dns欺骗
  17. bzoj1202 狡猾的商人[并查集]
  18. Matplotlib图片保存
  19. Hive连接Spark报错java.sql.SQLException: null, message from server: Host 'datanode03' is blocked becaus
  20. 折叠屏已经不新鲜了,明天你可能会用上“伸缩屏幕”!

热门文章

  1. android媒体播放框架,Android 使用超简单的多媒体播放器JiaoZiVideoPlayer
  2. python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!
  3. 演示教学法在计算机基础课程中的应用,演示教学法在《计算机基础》课程中的应用...
  4. 区位码怎么知道点阵里的起始点_自身免疫疾病的GAPS起始饮食改良版
  5. 大头贴计算机教程,推荐!自家电脑也能拍大头贴的秘密
  6. java 字符码_Java字符编码
  7. php树莓派魔镜,用树莓派和显示器制作一面“魔镜”
  8. anaconda如何卸载库_小白必看!Anaconda安装全攻略
  9. php如何转类型,PHP数据类型转换
  10. gerber文件怎么导贴片坐标_利用Gerber文件生成贴片坐标及元件位置图的方法技巧...