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


duncan103015 (錦毛爺)


 



#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...)


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

 

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

 

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

 

以上。

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


qqrainbow (愛蜜莉雅)


剛剛發現a不一定小於b

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