使用筛选法求出 n 以内的素数

一、题目介绍

输入描述:

多组输入,每行输入一个正整数(不大于100)。

输出描述:

针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

第二行,输出数组中2之后被清0 的个数。每行输出后换行

二、筛选法

筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。

数组中不为0 的数即为素数。

三、解析

首先,创造一个数组,在数组内放置1~n的整数。

其次,要利用筛选法的机制,2之后的所有能被2整除的数字清0,在这里需要使用for的双层嵌套,

表示,arr[1] 需要被arr[2] ~arr[n] 的数值全部模一遍,如若出现模等于0则设置这个模arr[1]的数值变为0。

四、代码演示

复制代码
#include <stdio.h>

int main() 
{
    int n =0;
    int count =0;
    int arr[1000];
    while(scanf("%d",&n)!=EOF)//多组输入
    {
        
        for(int i =0;i<n;i++)
        {
            arr[i]=i+1;//arr[0]内存储数字1
        }
        arr[0]=0;//把你的1拿出来不然会出错!因为任何数除去1都是整除的
        for(int i =1;i<n;i++)
        {
            if(arr[i]==0)
            {
                continue;
            }
            for(int j =i+1;j<n;j++)
    //数组中2之后的所有能被2整除的数清0,再把3之后的所有能被3整除的数字清0
            {
                if(arr[j]!=0)
                {
                    if(arr[j]%arr[i]==0)
                    {
                        arr[j]=0;
                        count++;

                    }
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            if(arr[i]!=0)
            {
                printf("%d ",arr[i]);
            }
        }
        printf("\n");
        printf("%d",count);

    }
    return 0;
}
相关推荐
哈里谢顿14 小时前
跳表(Skip List):简单高效的有序数据结构
数据结构
CoovallyAIHub18 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
有意义21 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
用户726876103371 天前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect1 天前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
ZhengEnCi2 天前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记2 天前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
任沫2 天前
字符串
数据结构·后端