[蓝桥杯 2019 省 B] 等差数列 |数学、最大公约数gcd、等差数列

2024-04-09 13:52

本文主要是介绍[蓝桥杯 2019 省 B] 等差数列 |数学、最大公约数gcd、等差数列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:

P8682 [蓝桥杯 2019 省 B] 等差数列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 1.等差数列 - 蓝桥云课 (lanqiao.cn)

说明:

思路:

这道题首先想到的是先排序,因为等差数列是有一个大小顺序的。在这里按升序排,把数列看成非递减的,然后找出最小的差值,因为对于相差最小的这两个数,如果再把差值定大一点,这两个数就不能构成等差数列,再定小一点,要使这两个数构成等差数列就需要在中间插入数,就变长了,所以要尽在保持能够组成等差数列的同时可能少插入,所以以这两个数的差值做等差数列的差值,其他的两个数之间插入数来构成等差数列。

这样想好像没问题,但是:

如果最小差值为2d,某两项ai,ai+1差值为3d,那么就无法插入一个整数使得ai、插入的数、ai+1变成等差数列

于是就要找差值的最大公约数,因为只有公差为每个差值的约数才能在两个数之间插入自然数(从0开始的整数) 个 数字,使得序列变成等差数列。结合之前的要找大一点的数做公差,减少插入的数,使数列最短,那么就是找最大公约数了。

再用另一种说法来说明:对于等差数列有公式(an-a1) / d =n-1,d为公差。
因为要最短,不可能再添加比an更大的数或者比a1更小的数,那会使数列更长。所以(an-a1) 就确定了,于是当d越大,项数n越小。所以要保证序列为等差数列的同时,保证公差d最大。

因为该序列是等差数列的子序列。所以相邻两项的差一定是公差的倍数,即公差是所有相邻两项差的公约(因)数。我们的目标是公差d最大,那就求出序列所有相邻两项差的最大公因数, 最大公因数就是最大公差。

注意点:

1.1.C++库自带求最大公约数的函数,__gcd(a,b)。

2.公差为0的情况的特判

代码:

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=1e5+10;
//先排序,按升序排,因为等差数列一定是非递减的,然后找出最小的差值,因为 
//对于相差最小的这两个数,如果再把差值定大一点,这两个数就不能构成等差数列,
//再定小一点,要使这两个数构成等差数列就需要在中间插入数,就变长了,
//所以要尽在保持能够组成等差数列的同时可能少插入,所以以这两个数的差值做等差数列的差值,其他的两个数之间插入数
// 找差值的最大公约数
int n;
int ans=0;
int a[N];
signed main(){//关同步!!!ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n;for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);int diff=__gcd(a[1]-a[0],a[2]-a[1]);for(int i=3;i<n;i++){diff=__gcd(a[i]-a[i-1],diff);}//等差数列 差值为0的情况if(diff==0) ans=n;elseans=(a[n-1]-a[0])/diff +1;cout<<ans;return 0;
} 

这篇关于[蓝桥杯 2019 省 B] 等差数列 |数学、最大公约数gcd、等差数列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

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

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

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,