個人對素數的理解

2021-10-17 12:30:34 字數 1057 閱讀 2044

首先,對於乙個求100-200之間的素數,最初始的**應該是這樣的:

#include

intmain()

}if(i == j)

//到這裡有兩種可能,一種break跳出來的,不是素數;另一種是素數,即i和j相等

}return0;

}

**優化,就是讓計算機更輕鬆,讓計算機使用更少的資源解決問題

因為素數肯定是奇數,所以素數不能被偶數整除,因此可以讓j每次加2,而且j=1不能作為判斷條件,所以可以讓j從三開始

for

(j =

3; j < i; j+=2

)

這樣可以節省一半的資源,而且因為素數是奇數,所以i也應該從奇數開始,並且每次加2

for

(i =

101; i <

200; i+=2

)

這樣又可以節省一半的資源

因為乙個數分解成兩個數相乘,基本都是乙個大一點的數字和乙個小一點的數字,最相近就是兩個相同的數字相乘,所以j≤i½,所以還可以這樣改:

for

(j =

2; j <= sqrt(i); j+=2

)//sqrt()是庫函式,用來開根號

//需要引標頭檔案 #include

這樣又可以節省大部分的資源,這樣修改也需要對下方的判斷條件進行修改

if

(j>

sqrt

(i))

//如果i是素數,j出來的時候+2,肯定大於i½

這樣出來的**是

#include

#include

intmain()

}if(j>

sqrt

(i))

//到這裡有兩種可能,一種break跳出來的,不是素數;另一種是素數

}return0;

}

最後的**雖然比最初多寫了幾行,但是節省了絕大部分資源

個人對GDT GDTR LDT LDTR的理解

gdt是全域性描述附表,主要存放作業系統和各任務公用的描述符,如公用的資料和 段描述符 各任務的tss描述符和ldt描述符。tss是任務狀態段,存放各個任務私有執行狀態資訊描述符 ldt是區域性描述符表,主要存放各個任務的私有描述符,如本任務的 段描述符和資料段描述符等。gdtr是乙個長度為48bi...

個人對GDT GDTR LDT LDTR的理解

gdt是全域性描述附表,主要存放作業系統和各任務公用的描述符,如公用的資料和 段描述符 各任務的tss描述符和ldt描述符。tss是任務狀態段,存放各個任務私有執行狀態資訊描述符 ldt是區域性描述符表,主要存放各個任務的私有描述符,如本任務的 段描述符和資料段描述符等。gdtr是乙個長度為48bi...

個人對GBDT的理解

廢話不多說,首先dt即決策樹,gbdt使用的樹是回歸樹,生成方法見cart回歸樹。gbdt是提公升 boosting 方法的一種,但他不是adaboost,我們常使用adaboost進行分類,建議不要將gbdt和adaboost聯絡起來看。看下提公升樹模型的原理,它是個加法模型 其推導過程如下,使用...