/*哇,博客用了这么久,花了老长时间整理了下博客,才发现原来他有自带的代码格式(倒数第四个按钮。。。)
因为之前为了比赛简单的看过些数论的题目,所以这次先看着数论,博客从最简单的开始。
各大oj好像都停了,没法水几个题了,数论印象最深的就是筛素数这一块,突然想起来没具体发过,简单的提过,PrimeGap里用到过,总结一次吧。
第一种筛法较慢一些,O(nlog(n)),具体就是没选出一个新素数,便将其倍数全部剔除,很简洁
第二种,O(n),利用了每一个合数至少有一个最小质因子代码标注,枚举,每次出现新素数之后,枚举不大于这个数的最小质因子的指数,将他们的乘积剔除,*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 100005
int prime[N],vis[N];
void Aila(int n)
{
int k=1;
for(int i=2;i<n;i++)
{
if(!vis[i])
{
prime[k++]=i;
for(int j=2*i;j<n;j+=i)
{
vis[j]=1;
}
}
}
}
void Oula(int n)
{
int k=1;
for(int i=2;i<n;i++)
{
if(!vis[i])
prime[k++]=i;
for(int j=1;j<k&&i*prime[j]<n;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)//具体在这里
break;
}
}
}
int main()
{
Aila(1000);
for(int i=1;i<30;i++)
cout<<prime[i]<<" ";
memset(vis,0,sizeof(vis));
cout<<endl;
memset(prime,0,sizeof(prime));
Oula(1000);
for(int i=1;i<30;i++)
cout<<prime[i]<<" ";
return 0;
}