這題測資範圍是int以內
int最大2147483648
所以我們先求得 2147483648 開耕號內的質數比
會得到4792個質數而質數是46341
再來看測資,如果小於46341,直接用迴圈看看是否在質數表內
否則就
for(int i = 0 ; i < prime.length;i++ ){
if(x % primt[i] == 0) return false;
}
大致上這樣分享我的經驗
請問不用開根的方式可以嗎?
用for迴圈
for(j=2;j<i;j++)
這樣去找(C語言)
測試系統會給過嗎= =?
要先過濾掉是2的倍數。
--------------------------
假設你i是 29
for(j=2;j<i;j++)
{} //這樣執行 27次(2~29)
但是6*6=36,所以6以上就不可能是29的因數了
改成
for(j=3;j<i;j+=2)
{} //這樣執行 13次(3,5,7,9,11,13,15,17,19,21,23,25,27)
但後面還是多餘的
所以最後改成
int max = math.sqrt(i);
for(j=3;j<max .;j+=2)
{} //執行 2次(3,5)
請問不用開根的方式可以嗎?
用for迴圈
for(j=2;j<i;j++)
這樣去找(C語言)
測試系統會給過嗎= =?
要先過濾掉是2的倍數。
--------------------------
假設你i是 29
for(j=2;j<i;j++)
{} //這樣執行 27次(2~29)
但是6*6=36,所以6以上就不可能是29的因數了
改成
for(j=3;j<i;j+=2)
{} //這樣執行 13次(3,5,7,9,11,13,15,17,19,21,23,25,27)
但後面還是多餘的
所以最後改成
int max = math.sqrt(i);
for(j=3;j<max .;j+=2)
{} //執行 2次(3,5)
這題測資範圍是int以內
int最大2147483648
所以我們先求得 2147483648 開耕號內的質數比
會得到4792個質數而質數是46341
再來看測資,如果小於46341,直接用迴圈看看是否在質數表內
否則就
for(int i = 0 ; i < prime.length;i++ ){
if(x % primt[i] == 0) return false;
}
大致上這樣分享我的經驗