#include <ビット/ STDC ++ H.>
使用して名前空間STD;
CONST INT = MAXN 1E7;
BOOL VIS [MAXN];
プライム[MAXN]はint型、
int型F(int型N)// 1からnまでの素数の数をカウント
{
INT CNT = 0;
のmemset(VIS、falseに、はsizeof(VIS));
のために(; I <= N-I ++がI = 2 INT)
{
IF(VIS [I]!)
プライム[CNT ++] = I;
のための(INT J = 0; J ++); J <CNT && Iはプライム[J] <= N *
{
VIS [I *はプライム[J] = 1;
IF(I%のプライム[J] == 0)
BREAK;
}
}
戻りCNTを;
}
/ *場合I割り切れる素数[j]は
、私は[J + 1]この合成数は間違いなく素数である[j]が選別数を乗じてプライム*。
私はプライム[j]を含んでいるので、プライム[J ] [J + 1]は、プライムよりも小さくなっています。* /
INTのmain()
{
int型N; CIN >> N。
COUT << F(N)<< ENDL。
0を返します。
}
リニアサブふるいです
おすすめ
転載: www.cnblogs.com/ljy08163268/p/11703770.html
ランキング