數學基礎
一、高精度
介紹就不寫了,直接貼代碼了
讀入讀出在最後再加上吧qwq
char str[1000]; int a[1000],b[1000],c[1000];
高精 + / -(這兩個差不多,一塊吧)
for(int i=len-1;i>=0;i--) b[len-i] = str[i]-'0'; int m = len; n = max(n,m); for(int i=1;i<=n;i++) c[i]=a[i]+b[i]; for(int i=1;i<=n;i++) { c[i + 1] += c[i]/10; c[i] %= 10; } for(int i=1;i<=n;i++) if(c[i]<0) { c[i] += 10; c[i + 1] -= 1; } while(c[n] == 0) n -= 1;
高精 *
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) c[i + j - 1] += a[i] * b[j]; for(int i=1;i<=n+m-1;i++) { c[i + 1] += c[i] / 10; c[i] %= 10; } n = n + m - 1; while(c[n + 1] > 0) n += 1;
高精 / (B爲低精的一個數)
int B; cin>>B; for(int i=n;i>0;i--) { c[i] = a[i]/B; a[i - 1] += (a[i] % B) * 10; } while(c[n] == 0 && n > 0) n--;
輸入輸出
scanf("%s", str); //輸入 int len = strlen(str); for(int i=len-1;i>=0;i--) a[len - i] = str[i] - '0'; for(int i=n;i>0;i--) //輸出 printf("%d",c[i]);
二、快速冪:(代碼未檢查qwq)
1.分治
2.快速冪
三、費馬小定理
應用:
三、(代碼未檢查qwq)
GCD
LCM
四、質數判別(代碼未檢查)
1.直接判
............
2.sqrt判別
3.埃氏篩法(O(n loglogn))
4.線性篩法(接近O(n))
五、Euler
歐拉函數
是小於或等於n的正整數中與n互質的數的數目
歐拉定理
若n,a爲正整數,且n,a互素,則
矩陣
其中滿足
舉一個例子:
其中請注意:
矩陣乘法滿足結合律、分配率
但是不滿足交換律
例:求 f[n] 即斐波那契數列的第n項
其中便是針對於這個進行運算q
拓展:
若f(n) = 4f(n - 1) - 3f(n - 2) + 2f(n - 4) + b
若f(n) = 4f(n - 1) - 3f(n - 2) + 2f(n - 4) + b
則將變換矩陣改爲
鄰接矩陣的一些應用:
建立鄰接矩陣,並對於鄰接矩陣進行k次方的運算,得出的結果f[A][B]即爲結果
延伸一下:
將剛纔的求和改爲求最小值min
即爲min n i =1 min (a[A][i] * a[i][B]) i 其中的路徑
一些特殊的矩陣:
上三角矩陣:
分塊矩陣:
高斯消元:
針對於求解 n 元 1 次線性方程組
形如:
舉個例子:
無解的情況:
無數解的情況:
行列式已經學過就不再多提了;
單提一點:
矩陣逆元:
對於A進行變換的同時對於I單位矩陣進行變換
在A到達單位矩陣後I進行相等的變換會得到它的逆元
矩陣樹定理:
還有一個 k ^ 2 log n求常係數線性遞推方程(老師yy出來的)
太晚了...明天再補吧..