可逆矩阵生成

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	freopen("matrix.txt","w",stdout);
	int A[16][16],B[16][16],C[16][16];
	memset(A,0,sizeof(A));
	memset(B,0,sizeof(B));
	memset(C,0,sizeof(C));
	for (int i=0;i<16;i++)
	{
		A[i][i]=1;
		B[i][i]=1;
	}
	for (int i=0;i<5626596;i++) rand();
	int opa[10000],opb[10000],opc[10000];
	for (int i=0;i<100;i++)
	{
		opa[i]=rand()%16;
		opb[i]=rand()%16;
		if (opa[i]==opb[i]) continue;
		opc[i]=rand()%11-5;
		if (opc[i]==0) continue;
		for (int j=0;j<16;j++)
			A[opa[i]][j]+=A[opb[i]][j]*opc[i];
	}
	for (int i=0;i<16;i++)
	{
		for (int j=0;j<16;j++)
			printf("%d,",A[i][j]);
		printf("
");
	}
	printf("=============================================
");
	for (int i=99;i>=0;i--)
	{
		if (opc[i]==0 || opa[i]==opb[i]) continue;
		for (int j=0;j<16;j++)
			B[opa[i]][j]-=B[opb[i]][j]*opc[i];
	}
	for (int i=0;i<16;i++)
	{
		for (int j=0;j<16;j++)
			printf("%d,",B[i][j]);
		printf("
");
	}
	printf("=============================================
");
	for (int i=0;i<16;i++)
		for (int j=0;j<16;j++)
			for (int k=0;k<16;k++)
				C[i][j]+=A[i][k]*B[k][j];
	for (int i=0;i<16;i++)
	{
		for (int j=0;j<16;j++)
			printf("%d,",C[i][j]);
		printf("
");
	}
	printf("=============================================
");
	fclose(stdout);
	return 0;
}

  

原文地址:https://www.cnblogs.com/dramstadt/p/5777868.html