所以,我试图在c中制作一个eratosthenes筛的程序,但每个值都变成了0,具体来说,这是造成麻烦的部分,但我不知道出了什么问题
for (i = min; i <= max; ++i) {
if (checkprime(nums[i], i)) {
for (count = 2; i * count <= max; ++count) {
nums[(i-1) * count] = 0;
}
}
else nums[i] = 0;
}
这就是";checkprime";功能
int checkprime(int num,int count) {
for (count = count; count <= num / 2; ++count) {
if (num % count == 0) {
return 0;
break;
}
else {
return 1;
break;
}
}
}
显示如何制作筛子和提取素数的示例代码。
#include <stdio.h>
#include <stdlib.h>
#define LIMIT 100
int main(void) {
char *sieve = calloc(LIMIT, sizeof *sieve);
if(sieve == NULL) {
return 1;
}
for(int n = 2; n < LIMIT; n++) {
if(sieve[n] == 0) { // found a prime
printf("%d ", n);
for(int i = n * n; i < LIMIT; i += n) {
sieve[i] = 1; // mark off multiples
}
}
}
printf("n");
free(sieve);
return 0;
}
程序输出:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97