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 }

 

posted @ 2021-02-16 10:43  古比  阅读(41)  评论(0编辑  收藏  举报