构造素数表中关于函数体的问题,希望大佬解惑

在最后的函数体中(用来判断一个数是否为素数的函数),

knowPrimes[i] 是如何实现作用的?   为什么不能直接用i呢?

knowPrimes[]又是什么?

以及使用函数时if ( isPrime(i, prime, count) )中的prime又代表什么?

 

 

 

#include<stdio.h>
int isPrime(int x, int knowPrimes[], int numberofknowPries); 
//构建一个素数表
int main(void)
{
    const int number = 100;
    int prime[100] = {2};
    int count = 1;
    int i = 3;
    
    //将前一百个素数放入数组中
    while (count < number){
        if ( isPrime(i, prime, count) ){
            prime[count++] = i;
        } 
        i++;
    }
    
    //输出前一百个素数
    for (i=0; i<number; i++){
        printf("%d",prime[i]);
        if ((i+1)%5) printf("\t");
        else printf("\n");
    }
    return 0;
 }
 
 //函数体
 int isPrime(int x, int knowPrimes[], int numberofknowPries)
{
    int ret = 1;
    int i;
    for (i=0; i<numberofknowPries; i++){
        if(x % knowPrimes[i]==0){
            ret = 0;
            break;
        }
    }
    return ret;
 }

使用函数时if ( isPrime(i, prime, count) )中的prime

是一个大小100的数组,最开始存储的全是2,然后不停的把素数存进去,最后这个数组里就是从2开始的前100个素数。

knowPrimes[]是形参,传递过来的实参就是prime数组,也就是knowPrimes数组存放的也是素数。

int isPrime(int x, int knowPrimes[], int numberofknowPries)这个函数的功能就是判断x是不是一个素数,后两个参数表示当前knowPrimes数组的前numberofknowPries个元素(下标从0开始)已经存放了素数了。

这个函数的流程就是:对于x,让x依次除以knowPrimes数组的前numberofknowPries个数(也就是除以已经找到的素数),只要有一个能除尽,那么x就不是素数,直接退出返回0给主函数表示x不是素数,继续判断下一个数(x+1)是不是素数,也就是主函数中的i。

希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html