#include <stdio.h>
#include <string.h>
#include <mem.h>
bool a[100050], sign=true;
int n;//找出下一个质数
int find_next_prime(int prime)
{
while ( prime<=100050 )
{
if ( a[prime] ) return prime;
prime++;
}
return 0;
}
int main(void)
{
memset( a , true , sizeof(a) );
int i, count=0, prime=2, max, min, repeat,k,j;
a[1]=false;
a[0]=false;
//用筛法得到素数列
//但是有的地方就会重复= =不知道怎么解决,比如30
while ( 1 )
{
prime=find_next_prime(prime);
if ( prime == 0 ) break;
for ( i=prime*2 ; i<=100050 ; i+=prime )
{
a[i]=false;
}
prime++;
}
a[1]=true;
//得到所有的素数列
scanf("%d",&repeat);
for ( j=0 ; j<repeat ; j++ )
{
scanf("%d",&k);
if ( a[k] ) printf("0\n");
else
{
for ( i=k-1 ; i>1 ; i-- )
{
if ( a[i] )
{
min=i;
break;
}
}
for ( i=k+1 ; i<100050 ; i++ )
{
if ( a[i] )
{
max=i;
break;
}
}
printf("%d\n",max-min-1);
}
}
return 0;
}