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

xiaoxiao2021-02-28  99

//题目:求素数~ #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; }总结:筛选法求素数的速度更棒哟,标记法的思想不错,以后可视情况多多使用呦!
转载请注明原文地址: https://www.6miu.com/read-74203.html

最新回复(0)