题解 | #筛选法求素数#

筛选法求素数

https://www.nowcoder.com/practice/06c3dcc303654ef4926654023eca1e5a

#include <stdio.h>
#include <stdlib.h>
// 根据输入的数字n构建从2开始的数组
int* Creatarr(int n) {
    int* arr = (int* )calloc(sizeof(int) * n, sizeof(int));
    for (int i = 0; i < n - 1; ++i) {
        arr[i] = i + 2;
    }
    return arr;
}
// 根据题意,将元素对2 3 4 ...取余,不是素数的项替换为零
int* Primernums(int* arr, int arrsize, int* returnSize) {
    int div = 2, j = 0;
    int* ret = (int* )calloc(sizeof(int) * arrsize, sizeof(int));
    while (div != arrsize + 2) {
        int isPrinums = 1;
        for (int i = div - 1; i < arrsize; ++i) {
            if (arr[i] % div == 0) {
                arr[i] = 0;
            }
        }
        ++div;
    }
    // 构建返回数组,去除为零的项
    for (int i = 0; i < arrsize; ++i) {
        if (arr[i] != 0) {
            ret[j] = arr[i];
            ++j;
        }
    }
    *returnSize = j;
    return ret;
}
int main() {
    int n, returnSize;
    while (scanf("%d", &n) != EOF) {
        int* arr = Creatarr(n);
        int* ans = Primernums(arr, n - 1, &returnSize);
        int* pans = ans;
        for (int i = 0; i < returnSize; ++i) {
            printf("%d ", *pans++);
        }
        printf("\n%d", n - 1 - returnSize);
        free(arr);
        arr = NULL;
        free(ans);
        ans = NULL;
    }
    return 0;
}

全部评论

相关推荐

06-27 12:30
延安大学 C++
实习+外包,这两个公司底层融为一体了,如何评价呢?
一表renzha:之前面了一家外包的大模型,基本上都能答出来,那面试官感觉还没我懂,然后把我挂了,我都还没嫌弃他是外包,他把我挂了……
第一份工作能做外包吗?
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
06-25 21:00
门头沟学院 Java
多拆解背记一下当前的高频场景面试题,结合自己的项目经历去作答,面试通过率原来真的不会低!
牛客96559368...:小公司不就是这样的吗,面试要么是点击就送,要么就是往死里拷打,没有一个统一的标准。这个不能代表所有公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务