//题意:给出 n ,如果 n 是素数则输出 0 ,否则求出大于 n 的素数 k 与小于 n 的素数 j
//之间的差。

code:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAXN 1300000
using namespace std;
int prime[MAXN], count;
int visited[MAXN];

void Prime()
{
  for(int i=2; i<MAXN; i++)
  {
    if(prime[i]==0)
    for(int j=i+i; j<MAXN; j=j+i)
      prime[j]=1;
  }
}

int get_len(int a)
{
  int xi=a+1;
  int yi=a-1;
  visited[a]=1;
  if(prime[yi]==1 && !visited[yi])  {count++; get_len(yi);};
  if(prime[xi]==1 && !visited[xi])  {count++; get_len(xi);};
  return count;
}

int main()
{
  int n;
  memset(prime, 0, sizeof(prime));
  Prime();
  while(scanf("%d", &n),n)
  {
    if(prime[n]==0)  {printf("0\n"); continue;};
    memset(visited, 0, sizeof(visited));
    count=1;
    printf("%d\n", get_len(n)+1);
  }
  return 0;
}

posted on 2011-01-22 12:17  FreeAquar  阅读(198)  评论(0)    收藏  举报