-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