T T T 组数据,每一组数据给定 l , r , x l,r,x l,r,x,试求: gcd ? ( ? l x ? , ? l + 1 x ? , ? ? , ? r x ? ) \gcd(\lfloor \frac{l}{x}\rfloor,\lfloor \frac{l+1}{x}\rfloor,\cdots,\lfloor \frac{r}{x}\rfloor) gcd(?xl??,?xl+1??,?,?xr??) 的值。
发现由于发现如果 ? l x ? \lfloor \frac{l}{x}\rfloor ?xl?? 不等于 ? r x ? \lfloor \frac{r}{x}\rfloor ?xr??,那么 ? l x ? , ? l + 1 x ? , ? ? , ? r x ? \lfloor \frac{l}{x}\rfloor,\lfloor \frac{l+1}{x}\rfloor,\cdots,\lfloor \frac{r}{x}\rfloor ?xl??,?xl+1??,?,?xr?? 的值中,必有两数 x , y x,y x,y, 且 x = y + 1 x=y+1 x=y+1 ,这种情况下两数互质,答案为 1 1 1,否则则为 ? l x ? \lfloor \frac{l}{x}\rfloor ?xl??。
注意要开 long long
,一开始判断互质的情况想复杂了,只拿了
30
30
30 分。
#include <bits/stdc++.h>
#define debug puts("Y");
#define int long long
using namespace std;
int T, l, r, x;
signed main(){
for(cin >> T; T; T --){
cin >> l >> r >> x;
if(l / x == r / x){
cout << l / x << "\n";
}else{
cout << "1\n";
}
}
return 0;
}