1 /*本篇为转载,在此申明,具体就是先设定从2以后所有的数都为质数,定为质数的数的倍数则不是质数,慢慢排除后面的数*/ 2 3 4 5 #include<iostream> 6 #include<cstring> 7 using namespace std; 8 const int N = 1300000;//第10万个数为1299709 9 int prime[N]; 10 bool notPrime[N]; 11 int main() 12 { 13 14 memset(prime,0,sizeof(prime)); 15 memset(notPrime,0,sizeof(notPrime)); 16 int count = 0; 17 for(int i = 2; i < N;i++)//求素数表 18 { 19 if(!notPrime[i]) ; prime[count++] = i; 20 21 for(int j = 0; j < count && (i * prime[j] < N);j++) 22 { 23 notPrime[i * prime[j]] = true; 24 if(!(i % prime[j])) 25 break; 26 } 27 } 28 int test; 29 while(cin >> test && test != 0) 30 { 31 for(int i = 0; i < 100000; i++) 32 { 33 if(prime[i] == test)//输入的是素数 34 { 35 cout << "0" << endl; 36 break; 37 } 38 else 39 { 40 if(test < prime[i] && i != 0) 41 { 42 cout << prime[i] - prime[i - 1] << endl; 43 break; 44 } 45 } 46 } 47 } 48 return 0; 49 }
本知识属于个人知识成果,如需转载,请邮件请求