这篇文章上次修改于 698 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

题目传送门

题意:提供 $l$, $r$, $x$,求出$\gcd(\lfloor \frac{l}{x}\rfloor,\lfloor \frac{l+1}{x}\rfloor,\cdots,\lfloor \frac{r}{x}\rfloor)$

汉语翻译:对于每个$x$ ($l$ $\leq$ $x$ $\leq$ $r)$ ,求出$y=\lfloor \frac{l}{x}\rfloor$ ,最后求出所有$y$的最大公因数。

观察样例:

  • 对于第一组数据,$l=3,r=6,x=1$,即求 $\gcd(\lfloor \frac{3}{1}\rfloor,\lfloor \frac{4}{1} \rfloor, \lfloor \frac{5}{1}\rfloor,\lfloor \frac{6}{1}\rfloor)=1$。

  • 对于第二组数据,$l=8,r=11,x=4$,即求 $\gcd(\lfloor \frac{8}{4} \rfloor,\lfloor \frac{9}{4} \rfloor,\lfloor \frac{10}{4}\rfloor,\lfloor \frac{11}{4}\rfloor)=\gcd(2,2,2,2)=2$。

  • 对于第三组数据,$l=4,r=4,x=3$,即求 $\gcd(\lfloor \frac{4}{3}\rfloor)=1$。

感觉出现了很多$1$。

通过观察$gcd$内部的数,发现是非严格单调递增,每次多$1$。

想一想$\lfloor \frac{l+1}{x}\rfloor$-$\lfloor \frac{l}{x}\rfloor$一定满足$0<=\lfloor \frac{l+1}{x}\rfloor$-$\lfloor \frac{l}{x}\rfloor<=1$

又因为$gcd(n,n+1)=1$

所以大部分情况应该是1。

为什么样例输出的有非1情况?

再看$\gcd(\lfloor \frac{8}{4} \rfloor,\lfloor \frac{9}{4} \rfloor,\lfloor \frac{10}{4}\rfloor,\lfloor \frac{11}{4}\rfloor)=\gcd(2,2,2,2)=2$

$gcd$内的数全都一样。

还有一个小问题:怎么判断$gcd$内的数是不是一样的?

还记得前面说的$gcd$内的数单调递增。

只用判断第一个数和最后一个数相不相同。

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    long long T;
    scanf("%lld",&T);
    while(T--){
        long long l,r,x;
        scanf("%lld%lld%lld",&l,&r,&x);
        if(l/x==r/x){
            printf("%lld\n",l/x);
        }else{
            printf("1\n");
        }
    }
    return 0;
}

完结撒花~~~