/*
使用Eratosthenes筛选法来获取素数 start : 表示数组开始的下标,end : 表示数组结束的下标
和哈希表类似,我们是使用数组的下标来表示数字,数组中存储1或者0,来表示当前数组下标所表示的数字是是否是质数
如果为质数就是1,如果不为质数就是0
*/
void searchPrimeNumber(int *data, int start, int end) {
if (start > end) return;
int i = 2;
while (i < end) { // 赋值为1,可以使用memset代替
*(data + i) = 1;
i++;
}
for (i = 2; i < end; i++) {
if (i % 2 == 0) {
*(data + i) = 0; // 如果当前元素是偶数那么一定不是质数(除了2),因为以其为倍数的数也是偶数,所以就不需要进行判断了
continue;
}
// 只有i的值为前半段的时候,后面的元素才可能是其倍数,否则就不需要判断i后面的元素是否是它的倍数了
for (int j = i + 1; j < end && i < end/2 && *(data + j) == 1; j++) { // 后面的数据如果可以整除当前数据,那就将其排除
if (j % i == 0) {
*(data + j) = 0;
}
}
}
}
int main(void) {
int arr[100] = {0};
searchPrimeNumber(arr, 2, 100);
for (int i = 0; i < 100; i++) {
if (*(arr + i) == 1)
printf("%d ", i);
}
printf("\n");
system("pause");
}
C语言使用Eratosthenes筛选法来获取素数
最新推荐文章于 2024-07-24 06:12:13 发布