D GCD 素数筛
考虑1~n的素数个数为x.那么小于等于x的集合我们都可以找到全是素数的集合作为反例.那么只要输出x+2即可(1也要算上去).
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int N = 1e5+10; 5 int cnt, primes[N]; 6 bool st[N]; 7 void get_primes(int n)//线性筛 8 { 9 for(int i=2;i<=n;i++){ 10 if(!st[i]) primes[cnt++]=i; 11 for(int j=0;primes[j]<=n/i;j++){ 12 st[primes[j]*i]=true; 13 if(i%primes[j]==0) break; 14 } 15 } 16 } 17 int main() 18 { 19 int n; 20 cin >> n; 21 get_primes(n); 22 // for(int i=0;i<=cnt-1;i++){ 23 // printf("%d ",primes[i]); 24 // } 25 // printf("%d\n",cnt); 26 if(cnt + 1 == n) cout << -1 << endl; 27 else cout << cnt + 2 << endl; 28 return 0; 29 }