#16715: 為什麼><??? c++


duncan103015 (錦毛爺)

學校 : 國立溪湖高級中學
編號 : 85458
來源 : [49.216.38.72]
最後登入時間 :
2021-02-19 10:56:10
a121. 質數又來囉 | From: [61.223.130.159] | 發表日期 : 2019-02-01 15:31

 



#include <iostream>
using namespace std;

int main ()
{
int a, b, i, j;
long long int count;
while (cin >> a >> b)

{
count=b-a+1;
for (i = a; i <= b; i++)
{

for (j = 2; j*j<=i; j+=(j==2?1:2))
{
if(i%j==0)
{
count--;break;}
}

}
if(a==1) count-=1;
cout<<count<<endl;
}

return 0;
}

 
#16721: Re:為什麼><??? c++


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
a121. 質數又來囉 | From: [49.158.83.43] | 發表日期 : 2019-02-01 22:39

由於本人見識淺薄,因此見解不一定正確。於此請您當作參考:

 

本人第一直覺認為,「 j += (j == 2 ? 1 : 2) 」似乎是未定義行為(Undefined Behavior),可能根據不同編譯器(甚至是同一編譯器)得到不同結果。

 

可以試試看改成等價的語法。if (j == 2) j++ else j += 2 之類的,而 for 迴圈的最右邊的程式碼就空著。

 

以上。

 
#16727: Re:為什麼><??? c++


qqrainbow (愛蜜莉雅)

學校 : 國立嘉義高級中學
編號 : 83319
來源 : [36.238.5.68]
最後登入時間 :
2023-04-26 23:31:35
a121. 質數又來囉 | From: [36.239.127.78] | 發表日期 : 2019-02-02 17:41

剛剛發現a不一定小於b

可以用 assert(a<=b) 測測看,你會得到 RE

 
ZeroJudge Forum