蓝桥杯2023年A组-试题C-平方差

0.题目

1.题解

1.1 数学分析

思路

主要就是类似剪枝的思想,x必定满足某种条件,我们可以分奇偶情况进行讨论,最后在得出条件后使用暴力枚举.
x = (y-z)(y+z)

  1. 由于 奇数 ± 偶数 = 奇数, 偶数 ± 偶数 = 偶数, 奇数 ± 奇数 = 偶数;
    可以看出只要y,z的奇偶性质定了,则无论是加减奇偶性质都是定的
  2. 如果为 偶数 * 偶数 = 4 * N(常数), x是一个4的倍数
  3. 如果为 奇数 * 奇数 , x也是一个奇数,但是并
    令 y = a, z = a - 1; 一奇一偶
    a^2 - (a-1)^2 = 2a - 1 (a >=1 a∈N^*) 我们发现任意的奇数都是满足的
  4. 得到条件(所有奇数 + 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;
}
posted @   DawnTraveler  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示