採用先列質數表(1~10000)的方式。
測試會過,
但實際執行時第1測資就出錯。
不知道哪邊寫錯,請大家幫忙看看。
第 1 測資點(100%): WA (line:1)
答案不正確
您的答案為: 0 正確答案為: 46
code : http://ideone.com/bBprNK
#include <iostream>
#include <cstdlib>
#include <math.h>
#include <bitset>
const int Num = 10002; // 質數表大小 從 0 到 Num-1
std::bitset<Num> PrimeTable; // 質數表
void GeneratePrimeTable()
{
PrimeTable.set();
PrimeTable[0] = false; // 等於 false 代表非質數
PrimeTable[1] = false;
for(int i = 2 ; i < Num ; i++ )
{
if(PrimeTable[i])
{
// 若 i 為質數,則把 i 的倍數標記為非質數
for(int j = i*2 ; j < Num ; j += i)
{
PrimeTable[j] = false;
}
}
}
}
bool PrimeTest(int n)
{
if(n < Num)
{
return PrimeTable[n];
}
if(n%2 == 0)return false;
int max = (int)sqrt(n)+1;
for(int i = 3 ; i <= max ; i+=2)
{
if(PrimeTable[i] && ((n%PrimeTable[i]) == 0))return false;
}
return true;
}
int main()
{
GeneratePrimeTable();
int a,b;
while(std::cin >> a >> b )
{
int count = 0;
while(a<=b)
{
count += PrimeTest(a);
a++;
}
std::cout << count << std::endl;
}
};