题意:求两个素数(质数)之间的差值是否为2,若是,则ans++.且,最大的素数不能超过输入的N
Floating point exception错误
出现场合:求素数。
错误原因:%0,导致出现这个错误。
具体原理:因将cnt=1,而j从0开始,primes[0] = 0, 在if条件判断中i%primes[0] 开始报错
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int cnt;//如果cnt=1,从1开始的话,因为j从0开始,primes[0] = 0, i%0 会报floating point exception
bool st[N];
int primes[N];
int n;
void get_prime(){
for(int i = 2; i <= N; i++){
if(!st[i]) primes[cnt++] = i;
for(int j = 0; primes[j] <= N/i; j++){
st[primes[j] * i] = true;
if(i % primes[j] == 0) break;
}
}
}
int main(){
get_prime();
cin >> n;
int ans = 0;
int i = 1;
while(primes[i] <= n && i < cnt){
if(primes[i] - primes[i - 1] == 2)
ans++;
i++;
}
cout << ans << endl;
return 0;
}