未优化的,时间长
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <vector>
#include <math.h>
using namespace std;
int a[200],vis[200];
#define n 200
int main()
{
int i,j;
memset(vis,0,sizeof(vis));
for(i=2;i<=sqrt(n);i++) //只判断前一半就行
{
if(!vis[i])
{
for(j=i*i;j<=n;j+=i) //从i*i开始,因为i*i以前的都被判断过了,不用再重复
vis[j]=1;
}
}
for(i=2;i<=n;i++)
if(!vis[i])
printf("%d ",i);
return 0;
}
优化后的,减少时间
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <vector>
#include <math.h>
using namespace std;
int a[200],vis[200];
#define n 200
int main()
{
int i,j,countt=0;
memset(vis,0,sizeof(vis));
for(i=2;i<=n;i++)
{
if(!vis[i])
a[countt++]=i; //将素数存入数组a中
for(j=0;j<countt&&i*a[j]<=n;j++) //拿每一个数去筛
{
vis[i*a[j]]=1;
if(i%a[j]==0) //防止重复筛选,如:8会被4筛出来,所以不用再用2来筛
break;
}
}
i=0;
while(a[i])
printf("%d ",a[i++]);
return 0;
}

2430

被折叠的 条评论
为什么被折叠?



