题目描述
给定 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 。
题解代码’
规律:只有当x为奇数或4的倍数时才能拆分为两个数的平方差。
#include<iostream>
#include<math.h>
using namespace std;
long long int L, R, ans;
int main()
{
cin >> L >> R;
ans = 0;
if (((R - L)+1) % 2 == 0)//偶
{
ans = ans + ((R - L) + 1) / 2;
}
else//奇
{
if (L % 2 == 0)//偶
{
ans = ans + ((R - L) + 1) / 2;
}
else//奇
{
ans = ans + ((R - L) + 1) / 2 + 1;
}
}
for (int i = L; i <= R; i++)
{
if (i != 1 && i% 4 == 0)
{
ans++;
}
}
cout << ans << endl;
return 0;
}