0.题目
1.题解
1.1 数学分析
思路
主要就是类似剪枝的思想,x必定满足某种条件,我们可以分奇偶情况进行讨论,最后在得出条件后使用暴力枚举.
x = (y-z)(y+z)
- 由于 奇数 ± 偶数 = 奇数, 偶数 ± 偶数 = 偶数, 奇数 ± 奇数 = 偶数;
可以看出只要y,z的奇偶性质定了,则无论是加减奇偶性质都是定的 - 如果为 偶数 * 偶数 = 4 * N(常数), x是一个4的倍数
- 如果为 奇数 * 奇数 , x也是一个奇数,但是并
令 y = a, z = a - 1; 一奇一偶
a^2 - (a-1)^2 = 2a - 1 (a >=1 a∈N^*) 我们发现任意的奇数都是满足的 - 得到条件(所有奇数 + 4的倍数的偶数), 开始计算个数, 其实就是 [x/2] + x/4(这里是向上取整)
代码
注意这里向上取整直接用(x+1)/2, 不要用ceil,那是针对double的,这里即使你写了 / 2.0, 之后会有一个超大数据超过double范围导致报错!!!
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll ans = 0;
ll calculate(ll num){
return (num + 1) / 2 + num / 4;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll L, R;
cin >> L >> R;
ans = calculate(R) - calculate(L-1);
cout << ans;
}
标签:偶数,calculate,奇数,ll,平方差,蓝桥,num,2023,奇偶
From: https://www.cnblogs.com/trmbh12/p/18120732