本题为作业
给定一行n个正整数a[1]..a[n]。
m次询问,
每次询问给定一个区间[L,R],
输出a[L]..a[R]的最大公因数。
第一行两个整数n,m。
第二行n个整数表示a[1]..a[n]。
以下m行,
每行2个整数表示询问区间的左右端点。
保证输入数据合法。
共m行,每行表示一个询问的答案。
5 3 4 12 3 6 7 1 3 2 3 5 5
1 3 7
对于30%的数据,n <= 100, m <= 10
对于60%的数据,m <= 1000
对于100%的数据,1 <= n <= 1000,1 <= m <= 1,000,000
我们看题目是寻找 a[L]~a[R] 这片区间之内的一个最大公因数,
可以用ST表多次求解连续区域的最大公因数。
#include
using namespace std;
const int N=1e3+5;
int n,m,a[N],f[N][N];
int gcd(int x,int y)//最大公约数函数
{int i,j;while(y){int r=x%y;//辗转相除法x=y;y=r;}return x;
}
int main()
{int i,j,l,r;//套用ST表模板scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%d",&a[i]);f[i][i]=a[i];}for(i=1;i
上一篇:利物浦晒双红会海报:努涅斯C位,萨拉赫、远藤航出镜 利物浦晒双红会海报:努涅斯C位,萨拉赫、远藤航出镜
下一篇:克莱谈可能在附加赛战湖人:还有16场常规赛 在此之前不关注这些 克莱谈可能在附加赛战湖人:还有16场常规赛 在此之前不关注这些