原题连接:https://www.acwing.com/problem/content/4999/
以下给出完整代码,代码行中附解释:
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
void solve(){
// x = (y + z) * (y - z)
// 设a = y + z,b = y - z
// y = (a + b) / 2,z = (a - b) / 2
// 若y,z都是整数,则要求a,b的奇偶性相同
// a,b均为奇数时,x为奇数
// a,b均为偶数时,x为4的倍数
// 问题转化为求l ~ R之间的奇数和4的倍数的总个数
int l, r;
cin >> l >> r;
// 如果采用循环,会超时
// 1 ~ l - 1 的奇数
int cnt0 = l / 2;
// 1 ~ l - 1 的4的倍数
int cnt1 = (l - 1) / 4;
// 1 ~ R 的奇数
int cnt2 = (r + 1) / 2;
// 1 ~ R 4的倍数
int cnt3 = r / 4;
cout << cnt3 + cnt2 - cnt1 - cnt0;
}
signed main(){
cin.tie(nullptr)->sync_with_stdio(false);
int T;
// cin >> T;
T = 1;
while(T--){
solve();
}
return 0;
}