(C语言) 用数组的方法判断素数

Description
打印100以内的素数

Method Ⅰ
素数是在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,所以从x=2开始把x的所有小于100的倍数挨个排除掉

int main() {

    const int maxnum = 100;
    int isPrime[maxnum];
    int i, x;
    for (i = 0; i < maxnum; i++) {
        isPrime[i] = 1;//把数组所有元素初始为1
    }
    //元素的下标代表判断的数字,值为1表示素数,值为0不是
    for (x = 2; x < maxnum; x++) {
        if (isPrime[x]) {
            for (i = 2; i * x < maxnum; i++) {
                isPrime[i * x] = 0; //从2开始,把每个数的倍数都挨个排除掉
            }
        }
    }
    for (i = 2; i < maxnum; i++) {
        printf("%d\t", i);
    }
    return 0;
}

Method Ⅱ
isPrime() 的作用是判断整数 i 能不能被比他小的素数整除,如果能被其中一个整除就不是素数。根据这个方法非素数被从小到大依次排除,因此不用判断 i 能否被比它小的非素数整除

int isPrime(int x, int knownPrimes[], int count) {
    int ret = 1;
    int i;
    for (i = 0; i < count; i++) {
        if (x % knownPrimes[i] == 0) {
            ret = 0;
            break;
        }
    }
    return ret;
}


int main() {
    const int number = 100;
    int knownPrimes[number] = { 2 };
    int count = 1;//Number of known primes
    int i = 3;
    while (i<number)
    {
        if (isPrime(i, knownPrimes, count)) {
            knownPrimes[count++] = i;
        }
        i++;
    }
    for (i = 0; i < number; i++) {
        printf("%d ", knownPrimes[i]);
    }
    return 0;
}
发布了13 篇原创文章 · 获赞 0 · 访问量 269

猜你喜欢

转载自blog.csdn.net/Caiyii530/article/details/104518423