#include<iostream> #include<algorithm> #include<vector> using namespace std; const int maxn = 1e6 + 11; int a[maxn], vis[maxn]; int main() { int n; cin >> n; for (int i = 0; i < n; i ++) { cin >> a[i]; // out<<a[i]<<endl; for (int j = 2; j * j <= a[i]; j ++) { if (a[i] % j == 0) { vis[a[i] / j] = 1; } } vis[a[i]] = 1; } if (vis[1] == 0) { cout<<1<<endl; return 0; } if (vis[2] == 0) { cout<<2<<endl; return 0; } for (int i = 3; i < 1e6; i ++) { for(int j = 2; j * j <= i; j ++) { if (i % j == 0) { if (vis[j]) { vis[i] = 1; break; } if (vis[i / j]) { vis[i] = 1; break; } } } } for (int i = 1; i < 1e6; i ++) { if (vis[i] == 0) { cout<<i<<endl; return 0; } } return 0; }
将 a 数组中的每一个元素及其除本身与 1 的子因子标记为 一访问。
枚举每一个数,若该元素子因子被标记为 1, 则将至标记为 1。
返回第一个未被标记的元素即为所求结果。