这篇文章上次修改于 833 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
题意:提供 $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;
}
完结撒花~~~