首先,對於乙個求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聯絡起來看。看下提公升樹模型的原理,它是個加法模型 其推導過程如下,使用...