Max Coding blog

Max Coding blog

Zero in your target,and go for it.

基礎數論

基礎數論

\(MOD\)性質

  1. 性質1 \(a \equiv b\pmod k \Longleftrightarrow k \mid a - b\)

  2. 性質2 \(a \equiv b\pmod k\ \&\&\ c \equiv d\pmod k \Longleftrightarrow a + b = c + d(mod\ k)\)

  3. 性質3 \(a \equiv b(mod\ k)\ \&\&\ c \equiv d\pmod k \Longleftrightarrow ac = bd(mod\ k)\)

    • \(a \equiv b\pmod k \Longleftrightarrow a^n \equiv b^n\pmod k\)
    • \(a \equiv b\pmod k \Longleftrightarrow am \equiv bm\pmod k\)

Modulo(模除)

  1. \((a+b)\mod m = ((a\mod m) + (b \mod m)) \mod m\)
  2. \((a \cdot b)\mod m = ((a\mod m) \times (b \mod m)) \mod m\)

Lemma 1

我們在\(MOD\)性質3那邊有提到這個引理。 \(p\) is a prime \(\forall m, a, b\in \lbrace1,2,...,p-1\rbrace, a \equiv b\pmod k \Longleftrightarrow am \equiv bm\pmod k\)

Proof

而我們由性質1可知\(a \equiv b\pmod k \Longleftrightarrow k \mid a - b\) \(ma - mb \equiv 0\pmod k \Longleftrightarrow k \mid ma - mb\) 整理一下 \(m(a - b) \equiv 0\pmod k \Longleftrightarrow k \mid m(a - b)\)

費馬小定理(Fermat’s Little Theorem)

GIT

Git

修改已經存在Repository的檔案同時Add和Commit

1
$ git commit -a -m "update"

這樣的操作會將已經在Repository的檔案同時Add和Commit,但是不會把Untracked files加入。

尋找某人的commit

1
$ git log --oneline --author="name"

尋找某個commit訊息

1
$ git log --oneline --grep="message"

尋找某個內容

1
$ git log -S "condition"
快速冪和矩陣快速冪

快速冪 & 矩陣快速冪

快速冪

今天介紹快速冪和矩陣快速冪,首先今天如果我們要計算\(3^{15}\)這個數字,我們可以用一個簡單的迴圈去實作。

1
2
3
4
5
typedef long long ll;
ll num = 1;
for(int i = 0;i < 15;i++)
num *= 3;
cout << num << '\n';
然而這樣的計算方式的時間複雜度是\(O(N)\),太慢了,因此我們可以使用快速冪的方式來計算的更快,至於快速冪是什麼就是我接下來要介紹的。 他的做法會先將指數的部分轉成二進位,以\(3^{15}\)為例,\((15)_{10}\)轉成二進位為\((1111)_{2}\),那我們就可以把\(3^{15}\)寫成\(3^8\times 3^4 \times 3^2 \times 3^1\)
在Linux安裝CUDA,並在Pytorch進行CUDA訓練

首先找尋你要下載的版本

這邊我選擇CUDA11.4的版本,接著進入https://developer.nvidia.com/cuda-downloads 下載,由於我是使用Linux,所以選擇Linux版本,再來我選擇x86_64、ubuntu、20.04、deb(local)完成後照著下方給予的指令輸入至terminal:

1
2
3
4
5
6
7
8
9
10
11
12
13
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin

sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600

wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda-repo-ubuntu2004-11-4-local_11.4.2-470.57.02-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu2004-11-4-local_11.4.2-470.57.02-1_amd64.deb

sudo apt-key add /var/cuda-repo-ubuntu2004-11-4-local/7fa2af80.pub

sudo apt-get update

sudo apt-get -y install cuda

下載cuDNN

先進入https://developer.nvidia.com/rdp/cudnn-archive,並選擇你要的版本,這邊我選擇: Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x 點擊後會出現一排東西給你選,首先先下載第二排 cuDNN Library for Linux (x86_64) 再來挑選第5, 6, 7列的資料下載(我的ubuntu版本是20.04): - cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb) - cuDNN Developer Library for Ubuntu20.04 x86_64 (Deb) - cuDNN Code Samples and User Guide for Ubuntu20.04 x86_64 (Deb) > 有帳號的記得要登入才能下載,沒帳號的要註冊一個。

完成下載

首先先cd到Download,再來輸入以下指令: ### cudnn - tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz > 請注意後面檔案的名稱要與你下載的檔案名稱相同 - sudo cp cuda/include/cudnn.h /usr/local/cuda/include - sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 - sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

libcudnn

  • sudo dpkg -i libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb
  • sudo dpkg -i libcudnn8-dev_8.2.1.32-1+cuda11.3_amd64.deb
  • sudo dpkg -i libcudnn8-samples_8.2.1.32-1+cuda11.3_amd64.deb > 請注意後面檔案的名稱要與你下載的檔案名稱相同

安裝Pytorch cuda版

基於深度學習進行貓與狗的辨認(Pytorch)

這次會介紹我在Kaggle上進行的貓狗辨認程式,我最終的測試結果得準確率可以高達90%,此部份會使用Pytorch這個深度學習框架。

1. 準備資料

在進行訓練前需要先準備好資料,我們先從Kaggle上下載圖片下來,再做資料的分配,這邊使用貓1000張及狗1000張當作訓練資料,使用貓500張及狗500張當作驗證資料,最後使用100張貓狗照片當作測試資料,我不使用Kaggle給的所有照片,因為我的電腦要跑很久,所以這邊取比較少張照片做訓練。

C++物件導向

前提摘要

C++與C語言的最大差別就是在於物件導向的有無,在C語言時期的時候是運用函式導向,C語言有struct(結構)類似於C++的物件導向,但是struct僅擁有記憶體的存取的功能,並無運算資料的能力,所以C++的物件導向解決了這項問題,C++的物件導向擁有「資料成員」和「成員函式」,資料成員就是所謂的物件,提供記憶體給變數存取資料,而成員函式擁有運算資料的能力,因此C++的類別(class)就取代了C的結構(struct)。

基礎資料結構(Data Structure)-C++

array 陣列

陣列一個基礎的資料結構,為一種靜態的資料結構(static data structure),在使用前須要先宣告大小。

1
2
3
4
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
return 0;
}
陣列可以使用索引(index)來提取或儲存資料。
基礎演算法(Algorithm)-C++

前言

學到演算法這邊終於知道題目不是能解出來就好,要解的簡潔,什麼意思呢?就是說不是答案對就可以了,要有效率,執行速度能快就快,使用空間能小就小,這樣的觀念打破我一直以來的想法,也對程式越來越有興趣了,程式啊程式,你是多麼神秘且講道理啊!!!! ## 貪婪演算法 貪婪演算法就是做眼前最佳的動作,也就是局部解,但是到最後不見得是最好的動作,以下舉一個找零錢的例子。 通常找顧客零錢都是先將面額大的給顧客,再將較第二大

CSS

Change the words style(1)

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8"></meta>
<title>css</title>
</head>
<body>
<div style = "font-weight:bold;font-size:30px">Today's weater is good</div>
</body>
</html>
avatar
Max Wu
Hello