【洛谷 P9231】[蓝桥杯 2023 省 A] 平方差 题解(数学+平方差公式)

2024-03-01 09:44

本文主要是介绍【洛谷 P9231】[蓝桥杯 2023 省 A] 平方差 题解(数学+平方差公式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[蓝桥杯 2023 省 A] 平方差

题目描述

给定 L , R L,R L,R,问 L ≤ x ≤ R L \leq x \leq R LxR 中有多少个数 x x x 满足存在整数 y , z y,z y,z 使得 x = y 2 − z 2 x=y^2-z^2 x=y2z2

输入格式

输入一行包含两个整数 L , R L,R L,R,用一个空格分隔。

输出格式

输出一行包含一个整数满足题目给定条件的 x x x 的数量。

样例 #1

样例输入 #1

1 5

样例输出 #1

4

提示

【样例说明】
  • 1 = 1 2 − 0 2 1=1^2-0^2 1=1202
  • 3 = 2 2 − 1 2 3=2^2-1^2 3=2212
  • 4 = 2 2 − 0 2 4=2^2-0^2 4=2202
  • 5 = 3 2 − 2 2 5=3^2-2^2 5=3222
【评测用例规模与约定】

对于 40 % 40 \% 40% 的评测用例, L , R ≤ 5000 L,R \leq 5000 L,R5000

对于所有评测用例, 1 ≤ L ≤ R ≤ 1 0 9 1 \leq L \leq R \leq 10^9 1LR109

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C


思路

由平方差公式可知, x = y 2 − z 2 x=y^2-z^2 x=y2z2 可以拆分为 x = ( y + z ) ( y − z ) x=(y+z)(y-z) x=(y+z)(yz)。易知 ( y + z ) (y+z) (y+z) ( y − z ) (y-z) (yz) 具有相同的奇偶性。当两者为奇数时,可以是1和x;当两者为偶数时,可以是2和x/2。则 x x x可以是奇数或者4的倍数。因此,程序通过计算区间内奇数的个数和4的倍数的个数,然后将两者相加,得到满足条件的 x x x的个数。

首先定义两个辅助函数 a a a b b b,函数 a a a用于求1到x的奇数个数,函数 b b b用于求1到x的4的倍数个数。

然后读取输入的两个数 l l l r r r。然后计算满足题目条件的 x x x的数量,即计算 ( a ( r ) − a ( l − 1 ) ) + ( b ( r ) − b ( l − 1 ) ) (a(r) - a(l - 1)) + (b(r) - b(l - 1)) (a(r)a(l1))+(b(r)b(l1)),其中 a a a b b b是前面定义的两个函数。最后输出计算结果。


AC代码

#include <algorithm>
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;// 求1到x的奇数个数
int a(int x) { return (x + 1) >> 1; }// 求1到x的4的倍数个数
int b(int x) { return x / 4; }int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int l, r;cin >> l >> r;cout << (a(r) - a(l - 1)) + (b(r) - b(l - 1)) << "\n";return 0;
}

这篇关于【洛谷 P9231】[蓝桥杯 2023 省 A] 平方差 题解(数学+平方差公式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762022

相关文章

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样