筛选法求素数 & 普通法求素数

来源:互联网 发布:m258 施耐德软件 编辑:程序博客网 时间:2024/06/07 03:58
//题目:求素数~
#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);//全部标记为0for(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;}
总结:筛选法求素数的速度更棒哟,标记法的思想不错,以后可视情况多多使用呦!