#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;
}
由於本人見識淺薄,因此見解不一定正確。於此請您當作參考:
本人第一直覺認為,「 j += (j == 2 ? 1 : 2) 」似乎是未定義行為(Undefined Behavior),可能根據不同編譯器(甚至是同一編譯器)得到不同結果。
可以試試看改成等價的語法。if (j == 2) j++ else j += 2 之類的,而 for 迴圈的最右邊的程式碼就空著。
以上。