乘法结合律的(25+8)X4算法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乘法结合律的(25+8)X4算法?相关的知识,希望对你有一定的参考价值。

做简单的计算其实很容易。首先我们把公式改成25×4×8×8=6400,因为25×4直接变成100,后面两个数乘以100就是一个整数。
想让这个公式容易计算,可以先算25×4,8和8倍,2倍,5×4倍括号,8×8括号,等于100×64,等于6400。
利用乘法结合律,交换乘法器的运算顺序结果不变,所以原公式等于(8×8)×(25×4)=64×100=6400。
本题考查灵活运用乘法表和结合律做十、一百、一千。25×8×4×8=25×4×8×8=(25×4)×(8×8)=100×64=6400
25×8×4×8的简单算法是25,先乘以4,再乘以8×8等于100×8×8=6400。
参考技术A 根据乘法结合律(25+8)x4=25x4+8x4=100+32=132 参考技术B 二十五乘以四等于一百,八乘以四等于三十二。一百加上三十二等于一百三十二。 参考技术C 二十五乘以四加八乘以四 参考技术D =25x4+8x4
=100+32
=132

51nod 1140 矩阵相乘结果的判断

弱弱的买了随机算法的视频水了一下2333

真的是好神

大概就是判AB=C,这样的话再等式两边同乘一个1*n的矩阵H(貌似有个专业的名字),这样矩阵乘法的复杂度就是n^2的。

因为矩阵乘法是有结合律的,所以就是先算出HA(蛤??),再算(HA)*B,然后和HC看是不是相等就好

 

get高端暴力姿势

 1 #include<bits/stdc++.h>
 2 #define LL long long
 3 using namespace std;
 4 
 5 const int QWQ=505;
 6 
 7 LL a[QWQ][QWQ],b[QWQ][QWQ],c[QWQ][QWQ];
 8 int n;
 9 LL rnd[QWQ],ans1[QWQ],ans2[QWQ],ans3[QWQ];
10 
11 int main()
12 {
13     srand(time(0));
14     cin>>n;
15     for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) scanf("%lld",&a[i][j]);
16     for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) scanf("%lld",&b[i][j]);
17     for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) scanf("%lld",&c[i][j]);
18     int cnt=50;
19     while (cnt--)
20     {
21         memset(ans1,0,sizeof(ans1));
22         memset(ans2,0,sizeof(ans2));
23         memset(ans3,0,sizeof(ans3));
24         for (int i=1; i<=n; i++) rnd[i]=(LL)rand()%16;
25     //    for (int i=1; i<=n; i++) printf("%d ",rnd[i]); system("pause");
26         
27         for (int i=1; i<=n; i++)
28             for (int j=1; j<=n; j++)
29                 ans1[i]+=rnd[j]*a[j][i];
30     //    for (int i=1; i<=n; i++) printf("%d ",ans1[i]); cout<<endl;
31         for (int i=1; i<=n; i++)
32             for (int j=1; j<=n; j++)
33                 ans2[i]+=ans1[j]*b[j][i];
34     //    for (int i=1; i<=n; i++) printf("%d ",ans2[i]); cout<<endl;
35         for (int i=1; i<=n; i++)
36             for (int j=1; j<=n; j++)
37                     ans3[i]+=rnd[j]*c[j][i];
38     //    for (int i=1; i<=n; i++) printf("%d ",ans3[i]); cout<<endl;
39         
40         for (int i=1; i<=n; i++)
41             if (ans2[i]!=ans3[i]) 
42             {
43                 puts("No");
44                 return 0;
45             }
46     }
47     puts("Yes");
48     return 0;
49 }

 

以上是关于乘法结合律的(25+8)X4算法?的主要内容,如果未能解决你的问题,请参考以下文章

关于矩阵乘法结合律的证明

矩阵结合律的证明-2019.11.29

AVX 内在澄清,4x4 矩阵乘法奇数

乘法快速算法

51nod 1140 矩阵相乘结果的判断

C语言编程九九乘法表