题目描述
给定 L,R,问 L <=x<= R$ 中有多少个数x 满足存在整数 y,z 使得 x=y^2-z^2。
输入格式
输入一行包含两个整数 L,R,用一个空格分隔。
输出格式
输出一行包含一个整数满足题目给定条件的x 的数量。
样例 #1
样例输入 #1
1 5
样例输出 #1
4
提示
【样例说明】
1=1^2-0^2
3=2^2-1^2
4=2^2-0^2
5=3^2-2^2
【评测用例规模与约定】
对于 40% 的评测用例,L,R <=5000;
对于所有评测用例,1<= L <= R <=10^9。
由题意得知本题要求的是平方差,众所周知 x = y^2 - z^2 = ( y + z ) * ( y - z )
如果 x 是奇数,直接拆成1和它本身即可。
如果 x 是偶数,因为要拆成 2 个偶数,所以应是 2 * 2 = 4 的倍数
至此,答案求为 l 到 r 中奇数和 4 的倍数的个数即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
long int l,r;
cin>>l>>r;
int cnt = 0;
for(int i = l;i<=r;i++){
if(i%4 == 0){
cnt++;
}else if(i%2==1){
cnt++;
}else{
continue;
}
}
cout<<cnt;
return 0;
}
第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C