#9205: 解題方式


ak5612599 (魂o小草)


這題測資範圍是int以內

int最大2147483648 

所以我們先求得 2147483648 開耕號內的質數比

 會得到4792個質數而質數是46341

再來看測資,如果小於46341,直接用迴圈看看是否在質數表內

否則就

for(int i = 0 ; i < prime.length;i++ ){

      if(x % primt[i] == 0) return false;

 

大致上這樣分享我的經驗 

#9207: Re:解題方式


ts870920 (No Name)


請問不用開根的方式可以嗎?

用for迴圈

for(j=2;j<i;j++)
這樣去找(C語言)


測試系統會給過嗎= =? 

#9209: Re:解題方式


ak5612599 (魂o小草)


請問不用開根的方式可以嗎?

用for迴圈

for(j=2;j<i;j++)
這樣去找(C語言)


測試系統會給過嗎= =? 

 


就算是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) 

 

#9210: Re:解題方式


ak5612599 (魂o小草)


請問不用開根的方式可以嗎?

用for迴圈

for(j=2;j<i;j++)
這樣去找(C語言)


測試系統會給過嗎= =? 

 


就算是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) 

 

#9795: Re:解題方式


GundamA (福一陈申奥 Pascal)


這題測資範圍是int以內

int最大2147483648 

所以我們先求得 2147483648 開耕號內的質數比

 會得到4792個質數而質數是46341

再來看測資,如果小於46341,直接用迴圈看看是否在質數表內

否則就

for(int i = 0 ; i < prime.length;i++ ){

      if(x % primt[i] == 0) return false;

大致上這樣分享我的經驗 

额,能解释下这段代码的意思吗?我是学Pascal的c++代码看不懂