题目描述
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 longusing 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;
}