洛谷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个点,求优化,求优化

 program gcd1;
var
f:array[..,..] of longint;
n,m,i,j,l,r,p:Longint;
function gcd(x,y:Longint):longint;
begin
if x mod y= then exit(y)
else exit(gcd(y,x mod y));
end;
begin
read(n,m);
for i:= to n do read(f[i,i]);
for p:= to n- do
for i:= to n-p do
begin
j:=i+P;
f[i,j]:=gcd(f[i,j-],f[i+,j]);
end;
for i:= to m do
begin
read(l,r);
writeln(f[l,r]);
end;
end.
上一篇:Android项目环境搭建


下一篇:C# 5 break continue 球员成绩 彩票 选班长