//题目:求素数~
#include<stdio.h>
#include<math.h>
#include<string.h>
#define SIZE 1000
//第一种方法:常用方法
bool Isprimer(int data)
{
double data1 = data;
for(int i=2;i<=sqrt(data1);++i)
{
if(data % i == 0)
{
return true;
}
}
return false;
}
//第二种方法:筛选法求素数
//思想:标记法,不是你我就灭灯
void Isprimer_1(int *arr,int len)
{
memset(arr,0,sizeof(arr)*len);//全部标记为0
for(int j=2;j<sqrt((double)len);)
{
for(int i=2;i*j<len;++i) //把j的所有倍数全部挖掉
{
arr[i*j] = 1;
}
++j;
while(arr[j] == 1 && j<sqrt((double)len))//证明它非素数,所以它的倍数肯定已经被挖掉了
{
++j;
}
}
}
int main()
{
int arr[SIZE];
for(int i=0;i<SIZE;++i)
{
arr[i] = i+1;
if(!Isprimer(arr[i]))
printf("%d ",arr[i]);
}
printf("\n");
printf("*******筛选法求素数**********\n");
Isprimer_1(arr,SIZE);
for(int i=1;i<SIZE;++i)
{
if(arr[i] == 0)
{
printf("%d ",i);
}
}
return 0;
}
总结:筛选法求素数的速度更棒哟,标记法的思想不错,以后可视情况多多使用呦!