0
我想制作一个能够将2x2矩阵上升到k次方的程序。我知道如何制造一个能够平衡它的人,但是一旦我想要达到更高的能力,我就努力保存我所得到的结果,并在下一个等式中使用它。 a,b,c,d是矩阵中的数字,n是一次我想要做的矩阵的量,k是我想要矩阵被采用的功率,m是我想要使用的模的数量在数字上。我知道有一种相当简单的方法,但我无法找到一种很好的方法来使用我之前在下一个等式中完成的方程的结果。乘以矩阵C++
#include <iostream>
using namespace std;
int mnoz(int a, int b, int c,int d,int m){
int a2 = (a*a + c*b) % m;
int b2 = (a*b + b*d) % m;
int c2 = (c*a + d*c) % m;
int d2 = (c*b + d*d) % m;
return a2, b2, c2, d2;
}
int main()
{
int a, b, c, d, k, m, n;
int e, f, g, h;
int e2, f2, g2, h2;
cin >> n;
// a^k = (a^2)^k/2
for (int i = 0; i<n; i++){
cin >> a >> b >> c >> d >> k >> m;
if (k == 1){
cout << a << " " << b << " " << c << " " << d << endl;
}
else if (k == 2){
e = (a*a + c*b) % m;
f = (a*b + b*d) % m;
g = (c*a + d*c) % m;
h = (c*b + d*d) % m;
cout << e << " " << f << " " << g << " " << h << endl;
}
else{
if (k % 2 == 0){
e = (a*a + c*b) % m;
f = (a*b + b*d) % m;
g = (c*a + d*c) % m;
h = (c*b + d*d) % m;
int z = (k/2)-1;
for (int j = 0; j < z; j++){
int e2 = e;
int f2 = f;
int g2 = g;
int h2 = h;
mnoz(e2, f2, g2, h2, m);
}
cout << e << " " << f << " " << g << " " << h << endl;
}
}
}
system("pause");
return 0;
}
我相信你需要学习C或C的内存管理方面++ - 分配2×2矩阵为向量的双指针或载体。然后,您可以将它传递给该功能,并随时随地保留部分产品。 –