矩陣運算
矩陣運算:
/******************************************=
矩陣運算
複雜度:o(n^3)
****************************************=*/
const int maxn = 105;
const int maxm = 105;
struct matrix
matrix operator + (const matrix &b) const
matrix operator - (const matrix &b) const
matrix operator * (const matrix &b) const
};
矩陣加法
對應位置相加。(等行等列)
**如下:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define debug "output for debug\n"
#define pi (acos(-1.0))
#define eps (1e-6)
#define inf (1<<28)
#define sqr(x) (x) * (x)
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int max=105;
struct matrix
};matrix operator +(matrix a,matrix b)
};matrix operator -(matrix a,matrix b)
};matrix operator *(matrix a,matrix b)
};matrix operator *(matrix a,matrix b)
return c;
}int main()
{ int i,j,k;
matrix a,b,c;
//printf("輸入矩陣的行列(n)和冪值(k):\n");
scanf("%d%d",&n,&k);
//printf("輸入n*n的矩陣a:\n");
for(i=0;i
2、給定矩陣a,請快速計算出a^n(n個a相乘)的結果,輸出的每個數都mod p。
由於矩陣乘法具有結合律,因此a^4 = a * a * a * a = (a*a) * (a*a) = a^2 * a^2。我們可以得到這樣的結論:當n為偶數時,a^n = a^(n/2) * a^(n/2);當n為奇數時,a^n = a^(n/2) * a^(n/2) * a (其中n/2取整)。這就告訴我們,計算a^n也可以使用二分快速求冪的方法。例如,為了算出a^25的值,我們只需要遞迴地計算出a^12、a^6、a^3的值即可。根據
這裡的一些結果,我們可以在計算過程中不斷取模,避免高精度運算。
大數運算(加減乘除)
加法 void add char a,char b,char d for i len i 1 i if c i 48 len else break for i 0 i len i d i c len i view code 減法1 d2 d1,如果需要比較大小自己加乙個不麻煩。void dec ch...
位運算加減乘除
按位異或 按位與 按位或 計算機系統中,數值一律用補碼來表示 因為補碼可以使符號位和數值位統一處理,同時可以使減法按照加法來處理。對補碼做簡單介紹 數值編碼分為原碼,反碼,補碼,符號位均為0正1負。原碼 補碼 數值位取反加1 補碼 原碼 對該補碼的數值位繼續 取反加1 補碼 的絕對值 稱為真值 正數...
大數運算 加減乘除
大數運算產生的原因就是因為int,double型別表示範圍都有限,無法表示過長的數字比如 2345468454567865415467864453437。因此也就無法進行四則運算,為了實現這種運算,大數運算產生了。其實也很簡單,既然基本資料型別放不下這些資料,那就用陣列存放唄。定義char c 10...