题目描述
给定 L, R,问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 x = y2 − z2。
输入格式
输入一行包含两个整数 L, R,用一个空格分隔。
输出格式
输出一行包含一个整数满足题目给定条件的 x 的数量。
样例输入
复制
1 5
样例输出
复制
4
提示
1 = 12 − 02 ;
3 = 22 − 12 ;
4 = 22 − 02 ;
5 = 32 − 22 。
对于 40% 的评测用例,LR ≤ 5000 ;
对于所有评测用例,1 ≤ L ≤ R ≤ 109 。
思路:
只有当一个数是奇数或者4的倍数的时候,才能写成俩个平方差。
题目中让我们输入两个数L,R,即一个范围L<X<R
我们需要判断在L到R上有多少个4的倍数的数和奇数
我们用return x/4+(x+1)/2实现这个数有多少个4的倍数的数和奇数
在L到R范围上用F(R)-F(L-1)实现
(参考网络上的大佬的解题思路🙏)
#include <iostream>
using namespace std;
int F(int x)
{
return x/4+(x+1)/2;
}
int main()
{
int L=0,R=0;
cin>>L>>R;
cout<<F(R)-F(L-1)<<endl;
return 0;
}