您的位置:首页 > 其它

素数筛

2018-02-04 23:22 148 查看
素数筛,顾名思义就是要筛去合数,留下素数,达到预处理的效果
基本思路:把从1开始的,某一范围内的正整数从小到大顺序排列,1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。
上代码之前,配上一道洛谷的题P1865 A % B Problem:点击这里
就是一道素数筛的裸题!!!(配上前缀和使用更美味)
附上本人的解题报告:
上代码:
#include <cstdio>
#include <iostream>
using namespace std;
int f[10000005];
void fp()//这是一个英文名,find_prime哈哈哈哈
{
 f[1]=1;//1不是素数,所以特判
  for(int i=2;i<=n;i++)
   for(int j=2;j*i<=n;j++) //从某个数的2倍开始删,保留这个数本身
   f[j*i]=1;
}
int main()
{
  int n;
  cin>>n;fp();
  for(int i=2;i<=n;i++)
  if(f[i]) cout<<i<<" ";
  return 0;
}

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  素数筛 数论