D
题目链接[小红的区间查询](https://ac.nowcoder.com/acm/contest/123787/D)
思路
将题目所给式子进行化简后可以得到x = b + (b-a)/(k-1) ;
开一个set存答案并去重
将b-a因式分解,对于其每个因子r,若x = b + (b-a)/r在[l,r]内,将x塞入set内
最后输出set的大小即可,时间复杂度 T * sqrt(b-a) * log ans (理论上是可能TLE的,但实际上没有)
代码
//
// Created by Dan on 2025/10/14.
//
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
using namespace std;
#define ull unsigned long long
#define PII pair<long long ,long long >
#define PIII pair<int, pair<int,int>>
#define pll pair<long long,long long>
#define f1n(x, n) for (int x = 1; x <= n; ++x)
#define fff(x, s, n) for (int x = s; x <= n; ++x)
#define f0n(x, n) for (int x = 0; x < n; ++x)
#define fn0(x, n) for(int x = n-1; x>=0; x--)
#define fn1(x, n) for(int x = n; x>0; x--)
#define double long double
//#define vector deque
#define vi vector<int>
#define LL long long
#define ll long long
#define int long long
#define vl vector<int>
#define vd vector<double>
#define vvl vector<vector<int>>
#define vvvl vector<vector<vector<int>>>
#define vv(type) vector<vector<type>>
#define vp vector<pair<ll,ll>>
#define nvvl(n, m) vector<vector<int>>(n,vector<int>(m,0))
#define nvvvl(n, m, t) vector<vector<vector<int>>>(n,vector<vector<int>>(m,vector<int>(t)))
#define nvvlt(n, m, t) vector<vector<t>>(n,vector<t>(m,0))
#define nvvlv(n, m, v) vector<vector<int>>(n,vector<int>(m,v))
int mod = 998244353;
const int inf = 1e18;
//#define endl '\n'
void init() {
}
void solve() {
int a, b, l, r;
cin >> a >> b >> l >> r;
int p = b - a;
set<int> st;
for (int i = 1; i * i <= p; ++i) {
if (p % i == 0) {
int x = b + p / i;
if (l <= x && x <= r)
st.insert(x);
x = b + i;
if (l <= x && x <= r)
st.insert(x);
}
}
cout << st.size() << endl;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
init();
while (t--) {
solve();
}
}


京公网安备 11010502036488号