#10877: C++第1測資就 WA ,找不出bug


noodlet (noodlet)

學校 : 國立臺南第一高級中學
編號 : 37964
來源 : [36.237.83.152]
最後登入時間 :
2016-04-30 19:02:20
a121. 質數又來囉 | From: [36.237.84.229] | 發表日期 : 2016-04-22 23:39

採用先列質數表(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;
}
};

 
ZeroJudge Forum