uva1644 素数间隔

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
using namespace std;
 
#define INF = 0x3f3f3f3f
 
const int maxn = 13e5;
int vis[maxn + 10];
set S;
 
void init(){           //使用素数筛选
	int q = sqrt(maxn + 0.5);
	for (int i = 2;i <= q; ++i){
		if (!vis[i]){
			for (int j = i * i; j <= maxn; j += i){
				vis[j] = 1;
			}
		}
	}
 
	for (int i = 2;i <= maxn; ++i){
		if (!vis[i]){
			S.insert(i);
		}
	}
}
 
int main(){
	int n;
 	memset(vis,0,sizeof(vis));
	init();
	while (scanf("%d",&n),n > 0){
		auto begin = lower_bound(S.begin(),S.end(),n);
 
		if (*begin == n){
			printf("0\n");
		}else{
			auto end = *begin;
			printf("%d\n",  end - *--begin);
		} 
	}
		
	return 0;
}

uva1644 素数间隔_第1张图片

你可能感兴趣的:(紫书第10章数学)