m0_57035919 2021-05-06 21:20 采纳率: 100%
浏览 33
已采纳

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

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

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;
 }

  • 写回答

2条回答 默认 最新

  • 正在学C++ 2021-05-06 21:51
    关注

    使用函数时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。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算