题意:给定一个整数,求离这个整数最近的两个素数(一大一小)之间的距离(差).
解题策略:用筛法求素数表
#include <iostream>
#include <math.h>
using namespace std;
#define MAXLEN 1299710
int isPrime[MAXLEN];
int prime[MAXLEN];
void sieve(int arr[], int len)//筛法求素数
{
int i, j;
int sqrt_len = sqrt(double(len));
for(i = 2; i < len; i++)
arr[i] = 1;
for(i = 2; i < sqrt_len; i++)
{
if (arr[i])
{
for (j = i; j*i <= len; j++)
arr[j * i] = 0;
}
}
int cnt = 0;
prime[0] = 1;
for(i = 2; i < len; i++)
{
if(arr[i] == 1)
{
prime[++cnt] = i;
}
}
}
int main()
{
sieve(isPrime, MAXLEN);
int n;
while(cin >> n && n != 0)
{
for(int i = 1;i < MAXLEN;i++)
{
if(n == prime[i])//输入为素数
{
cout << 0 << endl;
break;
}
else
{
if(n < prime[i])
{
cout << prime[i] - prime[i - 1] << endl;
break;
}
}
}
}
return 0;
}