這是我第一次發題解,有點小激動。。。
首先題目:
總時間限制:
1000ms 記憶體限制: 65536kb
描述 輸入乙個正整數n,求第n小的質數。
輸入 乙個不超過10000的正整數n。
輸出 第n小的質數。
樣例輸入 10
樣例輸出 29
第一次編寫的**:
1 #include2using
namespace
std;
3int
main()418
}19 printf("%d"
,s);
20return0;
21 }
判斷1~n能否整除n,還判斷可以的個數。很明顯,超時了。。。
第二次嘗試:
1 #include2using
namespace
std;
3int
main()414
if(s==n)
1519}20
return0;
21 }
又超時。。。
第三次:
1 #include2 #include3using
namespace
std;
4int
main()517
if(s==n)
1822}23
return0;
24 }
這次是判斷2~sqrt(n)能否整除n,精簡很多,沒有超時。
還得多練基本功,精簡演算法。。。
差不多一年過去了,不小心又翻到這篇題解,還是感覺自己改變了很多呀(變頹了)。雖然noip沒有一等獎,但應該是看**看到2點半的原因吧。
還是補充乙個線性篩素數的演算法吧。
1 #include2 #include3using
namespace
std;
4const
int maxn=10000005;5
intcheck[maxn],prime[maxn];
6int
main()719
if(m==n)
2024
}25 }
(雖然這種方法也不夠快,打表才是最快的呀。。。)
首先得把表打出來
1 #include2 #include3using
namespace
std;
4const
int maxn=10000005;5
intcheck[maxn],prime[maxn];
6int
main()719
for(int j=0;jj)
2024
}25 }
然後。。。
1 #include2using
namespace
std;
3int a[10005]=;
404int
main()
405
早知如此絆人心 何如當初莫相識。
noi 8163 第n小的質數
總時間限制 1000ms 記憶體限制 65536kb 描述 輸入乙個正整數n,求第n小的質數。輸入乙個不超過10000的正整數n。輸出第n小的質數。樣例輸入 10 樣例輸出 29 基本版 noi 8163 includeusing namespace std int main b 10001 int...
NOI 44 第n小的質數 C
質數,又稱素數,定義為在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數 驗證乙個數是否是素數,最常用的方法是 給定乙個大於2的數,對這個數求平方根,如果這個數能被從0到平方根的數中任意乙個數整除,那麼這個數就是不是質數,否則這個數就是質數。原理是 如果乙個數不是質數,一定能分解成兩個...
第n小的醜數
挑戰 獲得乙個醜數很容易,因為醜數可以通過 2x 3y 5z 獲得,同時任意醜數乘以 2 3 5 也是乙個醜數。但是如何獲得第 n 小的醜數呢?當 n 小於等於 6 時,第 n 小的醜數就是 n 本身 但 n 大於 6 時,需要通過前 6 個已知的醜數,從第 7 小的醜數開始計算,一直計算到第 n ...