秦九韶算法

秦九韶算法

喜你入骨 提交于 2020-02-27 13:29:11
秦九韶算法 秦九韶算法是一种一元多次多项式的求法 把多项式的值 \[ f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0\\ \] 转换为递推公式中 \(A_n\) 的值 \[ \left\{ \begin{array}{} A_0=a_n\\ A_k=A_{k-1}x+a_{n-k} \end{array} \right. \] 这样只需要n次乘法运算和n次加法运算. 举例 \[ f(x)=x^5+x^4+x^3+x^2+x\\ 求f(2)\\ A_0=1\\ A_1=A_0x+1=3\\ A_2=A_1x+1=7\\ A_3=A_2x+1=15\\ A_4=A_3x+1=31\\ A_5=A_4x+0=62\\ 所以f(2)=62 \] 来源: https://www.cnblogs.com/zzidun-pavo/p/12371643.html

解方程

三世轮回 提交于 2019-12-04 05:58:50
链接: https://ac.nowcoder.com/acm/problem/16499 来源:牛客网 题目描述 已知多项式方程: a 0 +a 1 x+a 2 x 2 +...+a n x n =0 求这个方程在[1, m]内的整数解(n和m均为正整数)。 输入描述: 第一行包含2个整数n、m,每两个整数之间用一个空格隔开。 接下来的n+1行每行包含一个整数,依次为a 0 ,a 1 ,a 2 ,……,a n 。 输出描述: 第一行输出方程在[1, m]内的整数解的个数。接下来每行一个整数,按照从小到大的顺序依次输出方程在[1, m]内的一个整数解。 示例1 输入 2 10 1 -2 1 输出 1 1 示例2 输入 2 10 2 -3 1 输出 2 1 2 示例3 输入 2 10 1 3 2 输出 0 备注: 对于30%的数据,0<n>i|≤100,a n ≠0,m≤100; 对于50%的数据,0<n>i|≤10100,a n ≠0,m≤100; 对于70%的数据,0<n>i|≤1010000,a n ≠0,m≤10000; 对于100%的数据,0<n>i|≤1010000,a n ≠0,m≤1000000。 解析: 我们考虑枚举m,对于每一个m,我们去检验它是否是多项式方程的一个解,检验的方法用到了秦九韶算法,秦九韶算法的作用就是求一个多项式方程的结果时,只需枚举n次

NOIP 2014 解方程

元气小坏坏 提交于 2019-12-03 07:24:24
洛谷 P2312 解方程 洛谷传送门 JDOJ 2890: [NOIP2014]解方程 D2 T3 JDOJ传送门 Description 已知多项式方程: a0+a1x+a2x2+⋯+anxn=0 求这个方程在[1, m]内的整数解( n和 m均为正整数)。 Input 输入共 n+2行。 第一行包含 2个整数 n、m,每两个整数之间用一个空格隔开。 接下来的 n+1行每行包含一个整数,依次为 a0,a1,a2,…,an。 Output 第一行输出方程在 [1, m]内的整数解的个数。 接下来每行一个整数,按照从小到大的顺序依次输出方程在 [1, m]内的一个整数解。 Sample Input Input I: 2 10 1 -2 1 Input II: 2 10 2 -3 1 Input III: 2 10 1 3 2 Sample Output Output I: 1 1 Output II: 2 1 2 Output III: 0 HINT 【数据说明】 对于 30%的数据,0< n ≤2, |ai|≤100,an≠0, m≤100; 对于 50%的数据,0< n ≤100,|ai| ≤10100,an≠0,m≤100; 对于 70%的数据,0< n ≤100,|ai| ≤1010000,an≠0,m≤10000; 对于 100%的数据,0< n ≤100,|ai|

浅谈秦九韶算法

人盡茶涼 提交于 2019-12-03 07:18:11
浅谈秦九韶算法 本篇随笔简单讲解一下 高中数学必修三 信息学奥林匹克竞赛中的秦九韶算法。 秦九韶算法的应用 求下式在 \(x\) 为定值时的值: \[ f(x)=a_0+a_1x+a_2x^2+a_3x^3+\cdots+a_nx^n \] 一开始面对这个东西,我们最早想到的可能是暴力算法:直接带进去乘法求值。 那还要秦九韶发明这个算法干什么 那么就隆重介绍秦九韶算法。 简单来讲就是提公因式。 原式可以变形成为: \[ f(x)=a_0+x(a_1+a_2x+a_3x^2+\cdots+a_nx^{n-1}) \] 继续提: \[ f(x)=a_0+x(a_1+x(a_2+a_3x+\cdots+a_nx^{n-2})) \] 以此类推... 最后提完之后就成为了这样的式子: \[ f(x)=(\cdots(a_nx+a_{n-1})x+a_{n-2})x+\cdots+a_1)x+a_0 \] 乍一看很复杂,其实很简单 (能入选高中课本的算法怎么可能难) 那么它比暴力算法优秀在哪呢? 想一下,以一个这样的式子为例: 计算下式的值: \[ f(x)=x^5+x^4+x^3+x^2+x+1\quad (x=5) \] 暴力算法就可以一个一个进行乘法和加法。 那么: 我们可以发现,进行了10次乘法(暴力计算 \(x^n\) 需要 \(n-1\) 次乘法运算),和5次加法。

关于秦九韶算法

∥☆過路亽.° 提交于 2019-12-02 02:00:43
秦九韶公式 作为语文课代表我当然要为大家科普一下一些常识~ 秦九韶(约公元1202年-1261年),字道古,南宋末年人,出生于鲁郡(今山东曲阜一带人)早年曾从隐君子学数术,后因其父往四川做官,即随父迁徙,也认为是普州安岳(今四川安岳县)人秦九韶与李冶、杨辉、朱世杰并称宋元数学四大家。(安岳县于1998年9月正式开工建设秦九韶纪念馆,2000年12月竣工落成。)秦九韶聪敏勤学,宋绍定四年(公元1231),秦九韶考中进士,先后担任县尉、通判、参议官、州守等职。先后在湖北、安徽、江苏、浙江等地做官。南宋理宗景定元年(公元1260年)出任梅州太守,翌年卒于梅州。据史书记载,他“性及机巧,星象、音律、算术以至营造无不精究”,还尝从李梅亭学诗词。他在政务之余,以数学为主线进行潜心钻研,且应用范围至为广泛:天文历法、水利水文、建筑、测绘、农耕、军事、商业金融等方面 秦九韶是我国古代数学家的杰出代表之一,他的《数书九章》概括了宋元时期中国传统数学的主要成就,尤其是系统总结和发展了高次方程的数值解法与一次同余问题的解法,提出了相当完备的“正负开方术”和“大衍求一术”。对数学发展产生了广泛的影响. 秦九韶是一位既重视理论又重视实践,既善于继承又勇于创新的科学家,他被国外科学史家称为是“他那个民族,那个时代,并且确实也是所有时代最伟大的数学家之一 当然以上内容摘自百度百科! emmmmm 不闹了,讲正文

计算将k进制a转化成十进制b。

雨燕双飞 提交于 2019-12-01 17:44:12
问题:将k进制a转化成十进制b。 例如:'1101'是2进制,转成成十进制是1*2 3 +1*2 2 +0*2+1*2 0 =8+4+0+1=13 分析:如果有字母的话,代表是十进制以上。先把字母转化成相对应的数字。 def get_int(n): """ 将一个进制中的字母转化成所代表的数字 :param n: :return: """ upper_num_dic = {chr(i): i - 55 for i in range(65, 91)} lower_num_dic = {chr(i): i - 87 for i in range(97, 123)} return upper_num_dic.get(n) or lower_num_dic.get(n) 然后再进行计算,一种朴素的方法是直接乘方,进行计算。 def get_ten_num(k, a): b = 0 # 最后结果 m = 0 # 指数 for i in range(len(a) - 1, -1, -1): n = int(a[i]) if a[i].isdigit() else get_int(a[i]) b += n * (k ** m) # 这里可以使用秦九韶算法优化 m += 1 return b 朴素直接方法 很容易看出,这里跟求指数之和的算法是一样的,因此可以使用秦九韶算法,将前面计算的结果保存起来