一、题面
二、题面
根据题目的要求容易想到素数筛法最适合求解
什么是素数筛法?
首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数。
这一过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了。维基百科上有一张很形象的动画,能直观地体现出筛法的工作过程。
三、实现代码
#include <iostream>
using namespace std;
int main(){
int n,i,tmp,j,tmp2;
bool prime[1299710];
for(i=0;i<1299710;i++)
prime[i]=true;
for(i=0;i<2;i++)
prime[i]=false;
i=2;
while(i<1299710){
tmp=2;
j=i*tmp;
while(j<1299710){
prime[j]=false;
tmp++;
j=i*tmp;
}
i++;
for(;i<1299710;i++)
if(prime[i]==true) break;
}
while(cin>>n){
if(n==0) break;
if(prime[n]==true) cout<<0<<endl;
else{
tmp=n;
tmp2=n;
while(prime[tmp]==false)
tmp--;
while(prime[tmp2]==false)
tmp2++;
cout<<tmp2-tmp<<endl;
}
}
return 0;
}