当前位置: 首页 > news >正文

数学-算法

一、数学算法

1、高斯算法

    以首项加末项乘以项数除以2来计算“1+2+3+4+5+···+(n-1)+n”的结果。这样的算法被称为高斯算法。

算法由来

    高斯小时候非常淘气,一次数学课上,老师为了让他们安静下来,给他们列了一道很难的算式,让他们一个小时内算出1+2+3+4+5+6+……+100的得数。全班只有高斯用了不到20分钟给出了答案,因为他想到了用(1+100)+(2+99)+(3+98)……+(50+51)……一共有50个101,所以50×101就是1加到一百的得数。后来人们把这种简便算法称作高斯算法。

计算方法

求结果
结果的计算方法: (首项 + 末项)* 项数 / 2
例1:1+2+3+4+5+······+10,公式为:(1+10) * 10 / 2 = 55
例2:1+2+3+4+5+······+100,公式为:(1+100) * 100 / 2 = 5050
例3:2+4+6+8+······+20,公式为:(2+20) * 10 / 2 = 110
例4:1+2+3+4+5+······+n,公式为:(1+n) *n / 2
例5:2+4+6+8+10+······+n,公式为:(2+n) * [(n-2)/2+1] / 2

求项数
项数的计算方法:(末项 - 首项) / 项差 + 1
项差: 每项之间的差。例:1+2+3+4+5+······,项差为1
例1:1+2+3+4+······+10,项数为:(10-1) / 1+1 = 10
例2:4+8+12+16+······+28,项数为:(28-4) / 4+1 = 7

人物介绍

    约翰·卡尔·弗里德里希·高斯(Johann Carl Friedrich Gauss ,1777年4月30日-1855年2月23日)德国著名数学家、物理学家、天文学家、大地测量学家,是近代数学奠基者之一,被认为是历史上最重要的数学家之一,并享有“数学王子”之称。
    高斯和阿基米德、牛顿并列为世界三大数学家。一生成就极为丰硕,以他名字“高斯”命名的成果达110个,属数学家中之最。他对数论、代数、统计、分析、微分几何、大地测量学、地球物理学、力学、静电学、天文学、矩阵理论和光学皆有贡献。

2、等差数列求和

    一般地,如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列称为等差数列,这个常数称为等差数列的公差,用字母d表示,等差数列的首项用a1表示。一般地,Sn=a1+a2+a3+…+an,我们称Sn为数列{an}的前n项和,等差数列的前n项和的求和公式为Sn=n(a1+an)/2,也可以表示为Sn=na1+n(n-1)d/2。

公式

对于等差数列,前n项的和的求和公式为:

推导

倒序相加法

    高斯10岁时,他的算术老师出了一道题目,求1+2+3+…+100的结果,高斯给出了一种巧妙的解法:1+2+3+…+100=(1+100)+(2+99)+…+(50+51)=101×50=5050. 将这个算法推广到公差为d的任意等差数列{an}中,就可以得到等差数列的求和公式。

    /**
     * 等差数列求和
     *
     * @param a1:开始项
     * @param d:公差
     * @param n:项数
     * @return
     */
    private static int arithmeticSeriesSum(int a1, int d, int n) {
        return (a1 + a1 + (n - 1) * d) * n / 2;
    }

2829. k-avoiding 数组的最小总和 - 力扣(LeetCode)

//贪心 + 等差数列求和
    // 根据题目要求,在k是奇数的情况下,如果某个正整数a在数组中,那么k-a肯定不能在数组中。
    // 反过来也一样。但是题目要求总和最小,因此我们肯定是将这两个数字中小的放入数组,
    // 并且从1开始挑选数字放入数组,直到k/2为止。这之后的数字到k-1为止,都不能放入数组。
    // 如果这时数字还没到到达n个,我们需要从k开始,再挑选连续的 k−k/2个数字加入数组。因此最后的数组和是一段或者两段等差数列求和。
    public static int minimumSum(int n, int k) {
        if (n <= k / 2) {
            return arithmeticSeriesSum(1, 1, n);
        } else {
            return arithmeticSeriesSum(1, 1, k / 2) + arithmeticSeriesSum(k, 1, n - k / 2);
        }
    }

    /**
     * 等差数列求和
     *
     * @param a1:开始项
     * @param d:公差
     * @param n:项数
     * @return
     */
    private static int arithmeticSeriesSum(int a1, int d, int n) {
        return (a1 + a1 + (n - 1) * d) * n / 2;
    }

数据结构和算法(一)

再小的努力,乘以365都很明显!
每天⽤⼼记录⼀点点。内容也许不重要,但习惯很重要!
一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

相关文章:

  • java对象模型
  • Unity游戏开发如何优化移动端的延迟渲染管线?
  • 【NLP 43、文本生成任务】
  • 使用HTML5和CSS3实现3D旋转相册效果
  • LeetCode热题100精讲——Top4:移动零【双指针】
  • SpringBoot底层原理
  • AndroidStudio 下载
  • 大疆上云api直播功能如何实现
  • Linux文件目录管理指令详解(上篇)
  • STM32学习笔记之存储器映射(原理篇)
  • Langchain 历史消息和会话管理
  • 简单一周日期展示及选择切换
  • 定时任务框架选型指南:Quartz、Elastic-Job 与 XXL-JOB 深度对比与场景实践
  • vue对文件进行加密,后台解密后保存
  • EFK日志分析
  • 操作系统 :Linux基础开发工具
  • LLM之Agent(十四)| 字节开源ComputerUse纯视觉驱动GUI 智能体模型 UI-TARS
  • file io(I)
  • 数据类设计_图片类设计之8_自由图形类设计_(前端架构)
  • 云资源开发学习应用场景指南,场景 1 云上编程实践平台
  • 什么网站做任务可以赚钱/google网站推广
  • 策划书范文案例/网站优化排名方案
  • 奢侈品网站建设方案/关键词林俊杰歌词
  • 微信h5网站模板下载/保定网站seo
  • 汽修网站怎么做/珠海百度关键字优化
  • 新疆乌鲁木齐做网站/黄冈便宜的网站推广怎么做