-1
我是新來的C++。我試圖實現一個分割篩來找到質數,在給定的數字m和n之間。我的邏輯可能也是錯誤的。以下是我寫的代碼,在C++中使用ceil函數時的計算錯誤
long long m;
long long n;
std::cin >> m;
std::cin >> n;
vector<bool> sieve(n-m+1,true);
for(int i=2;i<sqrt(n);i++) {
long long j = ceil(float(m)/float(i));
while(j*i <= n) {
sieve[j*i - m] = false;
j++;
}
}
該代碼適用於小值m(即起始數字)。但是,當我m增加價值10^8訂購。由於(j * i-m)的值變負,我得到一個seg故障。在調試值爲m = 63458900的過程中,對於i = 3,我得到j = 21152966,它應該是ceil函數之後的21152967。
n-m的值總是小於10^6。
任何幫助,高度讚賞。謝謝。
施展雙重,而不是浮動。 – 2014-10-18 12:19:55
63458900/3確實是21152966 – radar 2014-10-18 12:19:57
@RADAR,對不起我的計算錯誤。 – 2014-10-18 12:58:07