9AC1TLE版
#include<iostream>
#include<math.h>
using namespace std;
const int N = 1e8+10;
int cnt;
bool v[N];
void get_primes(int n)
{
int m = sqrt(n + 0.5);
for (int i = 2; i <= m; i++)
if (!v[i])
for (int j = i * i; j <= n; j += i)
v[j] = 1;
}
int main()
{
int n;
scanf("%d", &n);
get_primes(n);
for (int i = 2; i <= n; i++)
if (!v[i])cnt++;
printf("%d", cnt);
return 0;
}
全AC版
#include<iostream>
#include<math.h>
using namespace std;
const int N = 1e8+10;
int cnt;
bool v[N];
void get_primes(int n)
{
int m = sqrt(n + 0.5);
for (int i = 2; i <= m; i++)
{
if (!v[i])
{
for (int j = i * i; j <= n; j += i)
{
v[j] = 1;
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
get_primes(n);
for (int i = 2; i <= n; i++)
{
if (!v[i])cnt++;
}
printf("%d", cnt);
return 0;
}
唯一的区别就是一个加了括号,一个不加括号,感觉很神奇~