首页 > 解决方案 > 为什么我的这部分代码总是返回值 0?

问题描述

所以,我试图在c中制作一个eratosthenes sieve程序,但是每个值都变成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;
}

这是“检查素”功能

int checkprime(int num,int count) {
    for (count = count; count <= num / 2; ++count) {
        if (num % count == 0) {
            return 0;
            break;
        }
        else {
            return 1;
            break;
        }
    }
}

标签: c

解决方案


显示如何制作筛子和提取素数的示例代码。

#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 

推荐阅读