一.算法简介

作用:

一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法

而秦九韶算法只需要n次乘法和n次加法。

意义:

该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,用于减少CPU运算时间。

详细算法作用过程:

二、算法应用:

1、求多项式的值

from functools import reducedef func(factors, x):value = reduce(lambda a, b: a * x + b, factors)#a负责储存结果,b负责去集合里取值return valuedef qFun(factors,x):sum = factors[0]for i in range(len(factors)-1):sum=sum*xsum=sum+factors[i+1]return sumfactors = (3,2,4,5,6,3)
x=2
print(qFun(factors,x))
print(func(factors,x))

两个函数功能相同,但第一个高级点,第二个是傻瓜式实现

*plus*

help(reduce)结果是:

Help on built-in function reduce in module _functools:reduce(...)reduce(function, sequence[, initial]) -> valueApply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates((((1+2)+3)+4)+5).  If initial is present, it is placed before the itemsof the sequence in the calculation, and serves as a default when thesequence is empty.

中文解释下,就是操作一个集合,把一系列数迭代操作成一个数。

不理解就看蓝色字的例子:)

2.大整数取模(hdu 1212 Big Number)

(1)题意:

给你一个长度不超过1000的大数A,还有一个数值不超过100000的B,快速求A % B。

(2)分析:

由秦九昭算法可知,任意一个整数n = akak-1ak-2.......a2a1a0可以拆分为:

n = (((((ak)*10 + ak-1)*10 + ak-2)*10 + .......)*10 + a1)*10+a0

例如:1234 = ((1*10 + 2)*10 + 3)*10 + 4

则大整数取模就可以转化为n个多项式每步取模。

(3) 贴份代码:

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10000 + 7;
char str[maxn];
int Horner(int mod){//秦九昭算法int len = strlen(str);int ans = 0;for(int i = 0;i<len;i++){ans = (ans*10 + str[i] - '0')%mod;}return ans;
}
int main()
{int mod;while(scanf("%s%d",str,&mod)!=EOF){int num = Horner(mod);printf("%d\n",num);}return 0;
}

python | 秦九昭算法详细介绍相关推荐

  1. HDU1212(大数取模-秦九昭算法)

    秦九昭算法: 把一个n次多项式f(x)=a[n]x^n+ a[n-1]x^(n-1)+-+a[1]x+a[0]改写成如下形式:f(x)=a[n] x^n + a[n-1]x^(n-1))+-+a[1] ...

  2. ACM数论----秦九昭算法

    一.算法简介 一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法.在人工计算时,一次大大简化了运算过程. 二.算法应用 1.大整数取模(hdu ...

  3. 【基础】秦九昭算法实现的多项式快速计算

    秦九昭算法 图片来自搜狗百科 #include <iostream> using namespace std; void main() {int num, x;//num为多项式阶数,x为 ...

  4. UVA-10929-You can say 11(秦九昭算法+同余与模算术)

    原题链接 1000位大数取余: 秦九昭算法+同余与模算术: 1314 = (((1)*10+3)*10+1)*10+4 ( a + b ) % n = ( ( a % n ) + ( b % n ) ...

  5. 秦九昭算法——MATLAB实现

    一.引入 对于多项式而言,要计算时的函数值时,需要进行次乘法和n次加法,其时间复杂度为. 那我们该用一个什么用的方式来降低其时间复杂度呢? (1条消息) 一套图 搞懂"时间复杂度" ...

  6. 整数反转----秦九昭算法

    题意 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0. 假设环境不允许存储 ...

  7. 计算多项式的值(秦九昭算法,clock()函数的使用)

    /* clock()函数使用模板clock():捕捉从程序开始运行到clock()被调用所消耗的时间.这个时间单位是clock tick. 常数CLK_TCK:机器时钟每秒所走的时钟打点数 clock ...

  8. 秦九昭算法(霍尔(Horner)法则)

      求下面式子的和: a0x0+a1x1+...+anxna_0x^0+a_1x^1+...+a_nx^na0​x0+a1​x1+...+an​xn   如果我们按部就班的算,那么我们需要n(n+1) ...

  9. c/c++ 秦九昭算法

    例:1010(二进制)一共4位,我们分解为4步. 一:0(第零位数)*2+1(第一位数)=1(运行数) 二:1(运行数)*2+0(第二位数)=2(运行数) 三:2(运行数)*2+1(第三位数)=5(运 ...

  10. 秦九邵算法,牛顿迭代算法,盛金公式

    基础数学算法 1.牛顿迭代法 (1)为什么要牛顿迭代 (2)实现牛顿跌代 2.秦九邵算法 (1).历史由来 (2).算法介绍 3.盛金公式 1.牛顿迭代法 (1)为什么要牛顿迭代 啥是牛顿迭代法?大大 ...

最新文章

  1. /etc/fstab 文件解释
  2. 03-UITableView索引栏显示自定义图片
  3. SQL 查询数据库中包含指定字符串的相关表和相关记录
  4. 一分二功率分配器_一文学会微波功率分配器
  5. 前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter
  6. knn k的选取_经典算法(四):KNN
  7. 为防范“手机低头族”出交通事故 韩国开发行人警示系统
  8. 三条中线分的六个三角形_三角形中的边长和线段(下)
  9. selenium滑块操作(基础)
  10. 数值计算之 梯度向量和梯度矩阵,雅可比矩阵,海森矩阵
  11. Asp.Net Core 系列教程 (一)
  12. 计算机维护岗位主要职责怎么写,计算机维护岗位职责.doc
  13. 安卓开发颜色以及对应代码(转载)
  14. 转:创业者一手货:我是怎么在网上卖鱼的?
  15. 【课程设计】基于图像处理的一维条形码识别-含matlab源码
  16. opengl 读取obj模型
  17. IPv4地址不够怎么解决
  18. 三维切面(水平面、冠状面、矢状面)的几种操作
  19. PythonOCC基础使用:曲面建模
  20. EPLAN自动线号放置

热门文章

  1. SecureCRT 不能输入命令及回车键不能用
  2. 智能语音识别--方案实现--具体过程
  3. 人脸识别小区门禁系统_小区人脸识别门禁系统
  4. 【观察】PowerMax:高端存储,中国制造
  5. 评测|HPE Nimble AF全闪存系列,诠释真正的高端存储
  6. 多模态融合(三)MFAS: Multimodal Fusion Architecture Search
  7. Redis 实战之多节点分布式锁【SpringBoot + RedLock】
  8. 2005年九大受宠技术:TD-SCDMA
  9. 【南阳OJ分类之语言入门】80题题目+AC代码汇总
  10. hdu6184 判断三元环