zoukankan      html  css  js  c++  java
  • 洛谷1890 gcd区间

    题目描述

    给定一行n个正整数a[1]..a[n]。
    m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数。

    输入输出格式

    输入格式:

    第一行两个整数n,m。
    第二行n个整数表示a[1]..a[n]。
    以下m行,每行2个整数表示询问区间的左右端点。
    保证输入数据合法。

    输出格式:

    共m行,每行表示一个询问的答案。

    输入输出样例

    输入样例#1:

    5 3
    4 12 3 6 7
    1 3
    2 3
    5 5
    

    输出样例#1:

    1
    3
    7
    

    说明

    对于30%的数据,n <= 100, m <= 10
    对于60%的数据,m <= 1000
    对于100%的数据,1 <= n <= 1000,1 <= m <= 1,000,000
    0 < 数字大小 <= 1,000,000,000

    解题思路

    这个题用的类似区间型DP,但是只能过8个点,求优化,求优化

     1 program gcd1;  
     2 var  
     3 f:array[1..1000,1..1000] of longint;  
     4 n,m,i,j,l,r,p:Longint;  
     5 function gcd(x,y:Longint):longint;  
     6 begin  
     7     if x mod y=0 then exit(y)  
     8     else exit(gcd(y,x mod y));  
     9 end;  
    10 begin  
    11     read(n,m);  
    12     for i:=1 to n do read(f[i,i]);  
    13     for p:=1 to n-1 do  
    14         for i:=1 to n-p do  
    15         begin  
    16             j:=i+P;  
    17             f[i,j]:=gcd(f[i,j-1],f[i+1,j]);  
    18         end;  
    19      for i:=1 to m do  
    20      begin  
    21         read(l,r);  
    22         writeln(f[l,r]);  
    23      end;  
    24 end.  
  • 相关阅读:
    VSCode
    git CAPTCHA required
    css :active
    节流 防抖
    判断数据类型
    http协议的三次握手和四次挥手
    http协议
    发布网站相关信息
    获取任意两个数之间多个随机数的方法;
    数组中的12个方法;
  • 原文地址:https://www.cnblogs.com/wuminyan/p/4743391.html
Copyright © 2011-2022 走看看