#9205: 解題方式


ak5612599 (魂o小草)

學校 : 明新科技大學
編號 : 35696
來源 : [175.98.144.194]
最後登入時間 :
2023-02-24 11:16:37
a007. 判斷質數 | From: [120.105.96.200] | 發表日期 : 2014-09-20 12:11

這題測資範圍是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)

學校 : 臺中市立東山高級中學
編號 : 43292
來源 : [114.38.65.159]
最後登入時間 :
2015-10-27 20:32:25
a007. 判斷質數 | From: [114.38.77.164] | 發表日期 : 2014-09-20 13:56

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

用for迴圈

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


測試系統會給過嗎= =? 

 
#9209: Re:解題方式


ak5612599 (魂o小草)

學校 : 明新科技大學
編號 : 35696
來源 : [175.98.144.194]
最後登入時間 :
2023-02-24 11:16:37
a007. 判斷質數 | From: [120.105.96.200] | 發表日期 : 2014-09-20 20:46

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

用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小草)

學校 : 明新科技大學
編號 : 35696
來源 : [175.98.144.194]
最後登入時間 :
2023-02-24 11:16:37
a007. 判斷質數 | From: [120.105.96.200] | 發表日期 : 2014-09-20 20:46

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

用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)

學校 : 上海市娄山中学
編號 : 43347
來源 : [192.119.166.133]
最後登入時間 :
2019-07-19 14:42:11
a007. 判斷質數 | From: [118.187.21.44] | 發表日期 : 2015-04-17 17:34

這題測資範圍是int以內

int最大2147483648 

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

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

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

否則就

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

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

大致上這樣分享我的經驗 

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


 
ZeroJudge Forum