题目:输出1-100内的所有素数
代码一(O(
)):
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
bool isprime(int n){ //判断是不是素数
if(n<=1) return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0){
return false;
}
}
return true;
}
int prime[101],pnum=0;
void find_prime(){ //找素数
for(int i=1;i<101;i++){
if(isprime(i)){
prime[pnum++]=i;
}
}
}
int main()
{
find_prime();
for(int i=0;i<pnum;i++){
printf("%d ",prime[i]);
}
return 0;
}
代码二 (埃式筛法):时间复杂度为O(n loglogn)
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdbool.h>
#include<algorithm>
using namespace std;
int prime[101],pnum=0;
void find_prime()
{
bool p[101];
memset(p,true,sizeof(p));//初始化数组为全真
for(int i=2; i<101; i++) //从2开始(默认已确定2是素数)
{
if(p[i]==true)
{
prime[pnum++]=i;
for(int j=i+i; j<101; j+=i)
{
p[j]=false;
}
}
}
}
int main()
{
find_prime();
for(int i=0; i<pnum; i++)
{
printf("%d ",prime[i]);
}
return 0;
}