乘法原理

算法分析实验之俄式乘法

拥有回忆 提交于 2020-03-23 13:31:34
题目描述 俄式乘法,又被称为俄国农夫法,它是对两个正整数相乘的非主流算法。假设m和n是两个正整数,我们要计算它们的积。它的主要原理如下: if n is 偶数 n m=n/2 2m else n * m=(n-1)/2 + m 该算法只包括折半,加倍,相加等几个简单操作,因此实现速度非常快。具体计算如下图所示: 输入 两个正整数 n,m。 输出 n和m的乘积。 输出整个求和表达式,运算符与数字之间用一个空格隔开。 样例输入 复制 50 65 样例输出 130 + 1040 + 2080 = 3250样例分析:50 6525 130 左边数为奇数12 2606 5203 1040   左边数为奇数1 2080   左边数为奇数把左边数为奇数的右边的数全部加起来:130+1040+2080=3250 #include<iostream> using namespace std; int main() { int n,m; cin>>n>>m; int temp[1005]; int k=0; while(n!=0) { if(n%2==1){ temp[k]=m; k++; } n/=2; m*=2; } int sum=0; for(int i=0;i<k;i++) { sum+=temp[i]; cout<<temp[i]; if(i==k-1) cout<<" "<<"="<<"

[矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats

旧城冷巷雨未停 提交于 2020-01-04 00:42:03
矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 Matrix 题目 题解 code T4:Training little cats 题目 题解 code 做题的时候后悔没有保存过模板,还到处去找自己曾经写过的模板,然并卵,还是重新写了一遍,其实如果知道原理,就不用背模板了 每次复习的时候打完就觉得自己记住了,然而 复习矩阵乘法及快速幂模板 具体怎么乘的,移步 百度百科 乘法模板 struct Matrix { int n , m ; LL c [ MAXN ] [ MAXN ] ; Matrix ( ) { memset ( c , 0 , sizeof ( c ) ) ; } Matrix operator * ( const Matrix & a ) const { Matrix res ; res . n = n ; res . m = a . m ; for ( int i = 1 ; i <= n ; i ++ ) for ( int j = 1 ; j <= a . m ; j ++ ) for ( int k = 1 ; k <= m ; k ++ ) res . c [ i ] [ j ] = ( res . c [

四元数相关总结-未完

佐手、 提交于 2019-12-06 02:16:05
一,数学基础 1,向量乘法,点乘,叉乘的区别 初中高中课本上说的向量乘法,就是指叉乘,证明如下: 其中ixi = jxj = kxk = 0,注意,在四元数中 ixi = jxj = kxk = -1,为什么会这样没想明白,先留个问号吧 于是上面的结果就是 这与我们使用行列式法得出的结果相同。 2,复数的乘法表示旋转 3,qpq-1为什么表示旋转,证明 4,四元数的应用与原理 来源: https://www.cnblogs.com/timeObjserver/p/11956490.html

c语言 7-2 一元多项式的乘法与加法运算

匿名 (未验证) 提交于 2019-12-03 00:22:01
设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 输入样例: 输出样例: 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 5 20 -4 4 -5 2 9 1 -2 0 思路:因为本题多项式的绝对值最大为1000,所以可以利用类似桶排的原理来巧妙的纪录所要求的多项式和以及多项式乘法,代码如下:(但如果某个多项式的系数很大的话就不建议使用这种办法,实在是太浪费空间)。 #include<stdio.h> #define n 11234 int main() { } 文章来源: c语言 7-2 一元多项式的乘法与加法运算

快速乘法取模

匿名 (未验证) 提交于 2019-12-03 00:19:01
如果让你计算66666666666666666*555555555555555555(17位),这样一个结果对33333333333333333取模你会怎么计算呢,像这样2个long long型的整数相乘肯定会爆掉,所以我们引入一个快速乘法来计算,这个算法的原理是怎样的呢,其实和快速幂差不多。 例如:5(a)*8(b) = 5*2*2*2,5*9 = 5*3*3 = 5*(2+1)*(2+1),就是利用了这样的计算原理,就把 一个数不断除以2,一个数不断乘以2,如果b%2 == 1的话就在加一个a ,因为类似于5*3啊,5+5*2对吧。。。 实现代码: LL work(LL a, LL b, LL mod) { LL ans = 0; while(b) { if(b&1) { ans += a; ans %= mod; } a *= 2; a %= mod; b /= 2; } return ans; } 文章来源: 快速乘法取模

AES算法详解

限于喜欢 提交于 2019-12-01 07:19:56
AES算法简介   AES的全称是Advanced Encryption Standard,意思是高级加密标准。 AES密码分组大小和密钥大小可以为128位、192位和256位。然而AES只要求分组大小为128位。本文只对分组大小128位,密钥长度也为128位的Rijndael算法进行分析。密钥长度为192位和256位的处理方式和128位的处理方式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。    AES算法使用逻辑就是:发送方将要发送的明文数据X使用秘钥K进行AES加密后会得到密文Y,将密文进行网络传输,接受方在收到密文Y后使用秘钥K进行AES解密后技能得到明文X,这样即使密文Y在网络上传输时被截获了,没有秘钥也难以破解其真实意思。 AES算法相关数学知识   在AES算法中的MixColumn层中会用到伽罗瓦域中的乘法运算,而伽罗瓦域的运算涉及一些数学知识如下: 素域:   有限域有时也称伽罗瓦域,它指的是由有限个元素组成的集合,在这个集合内可以执行加、减、乘和逆运算。而在密码编码学中,我们只研究拥有有限个元素的域,也就是有限域。域中包含元素的个数称为域的阶。只有当m是一个素数幂时,即m=p n (其中n为正整数是p的次数,p为素数),阶为m的域才存在。p称为这个有限域的特征。 也就是说