【洛谷 9231】 [蓝桥杯 2023 省 A] 平方差
# [蓝桥杯 2023 省 A] 平方差
## 题目描述
给定 $L,R$,问 $L \leq x \leq 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 \leq 5000$;
对于所有评测用例,$1 \leq L \leq R \leq 10^9$。
第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C
题解:
容易看出:奇数和4的倍数都是满足条件的
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<bits/stdc++.h> using namespace std; int x,y; int work1(int n,int m){ while(n%4!=0) n++; while(m%4!=0) m--; return (m-n)/4+1; } int work2(int n,int m){ if(n%2==0) n++; if(m%2==0) m--; return (m-n)/2+1; } int main(){ //freopen("9231.in","r",stdin); //freopen("9231.out","w",stdout); scanf("%d %d",&x,&y); printf("%d ",work1(x,y)+work2(x,y)); return 0; }