Prime Gap UVA

来源:互联网 发布:mac winebottler msi 编辑:程序博客网 时间:2024/05/22 15:57

利用打表法,求出对应范围内的所有的素数,然后首先判断当前输入的数是否是素数,如果是素数,那么就直接输出0,如果不是,那么就向前找以及向后找,计算最终的结果即可。题目的关键在于打表,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;int data;const int maxn = 1299711;int vis[maxn+5];void Init(){int m = floor(sqrt(maxn) + 0.5);memset(vis,0,sizeof(vis));for (long long i = 2; i <= m; i++){if (!vis[i]){for (long long j = i*i; j <= maxn; j += i)vis[j] = 1;}}}int main(){Init();while (cin >> data){if (data == 0) break;if (!vis[data]) cout << "0\n";else{int i = data;while (vis[i] != 0) i--;int j = data;while (vis[j] != 0) j++;cout << (j - i) << endl;}}return 0;}