【洛谷 9231】 [蓝桥杯 2023 省 A] 平方差

发布时间 2023-10-26 15:50:25作者: #Cookies#

# [蓝桥杯 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;
}