#include<bits/stdc++.h>
using namespace std;
char inc;
inline void get(int& x)
{
x = 0;inc = getchar();
while(!isdigit(inc))inc=getchar();
while(isdigit(inc))
{
x=x*10+inc-'0';
inc=getchar();
}
}
#define maxn 100010
int gcd(int a,int b)
{
if(!a)return b;
if(!b)return a;
else return gcd(b,a%b);
}
int T,N,Q;
int a[maxn];
int lgcd[maxn],rgcd[maxn],L,R;
int ans[maxn];
int main()
{
get(T);
while(T--)
{
get(N),get(Q);
for(int i=1;i<=N;i++)get(a[i]);
lgcd[0] = rgcd[N+1] = 0;
for(int i=1;i<=N;i++)
lgcd[i] = gcd(lgcd[i-1],a[i]);
for(int i=N;i>=1;i--)
rgcd[i] = gcd(rgcd[i+1],a[i]);
while(Q--)
{
get(L);get(R);
printf("%d\n",gcd(lgcd[L-1],rgcd[R+1]));
}
}
return 0;
}
【CodeChef】 Gcd Queries
最新推荐文章于 2022-12-19 00:21:18 发布