题目
求出(L,R)之间所有可以写出x=y^2-z^2的x
分析
显然所有的奇数和所有四的倍数满足条件,但是问题在于区间可能宽为1e9,所以不能用遍历
优化
我们使用类似前缀和,也就是[i,j]=[1,j]-[1,i-1];
向上取整用整数除法,向下取整整数加一再去除
代码(c++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int res1 = (n-1)/4 + n/2;
int res2 = (m/4) + (m+1)/2;
//cout<<res1<<" "<<res2;
int res = res2 - res1;
cout<<res;
return 0;
}