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

一、题目介绍

输入描述:

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

输出描述:

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

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

二、筛选法

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

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

三、解析

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

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

表示,arr1 需要被arr2 ~arrn 的数值全部模一遍,如若出现模等于0则设置这个模arr1的数值变为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;
}
相关推荐
6Hzlia7 分钟前
【Classic 150 刷题计划】 LeetCode 123. 买卖股票的最佳时机 III | C++ 状态机动态规划与通用交易拓展
c++·算法·leetcode
luj_176822 分钟前
生物体如何应对功能击穿?
c语言·开发语言·c++·经验分享·算法
luj_176825 分钟前
击穿分析五大关键步骤
开发语言·网络·c++·经验分享·算法
wuyk55526 分钟前
从零吃透 MQTT 通信|第 11 章 MQTT 项目调试验证、性能优化、常见疑难问题、OTA 升级基础
c语言·开发语言·stm32·学习·性能优化
星空31 分钟前
Map<String, String>`Map`是接口,不能直接 new
java·前端·算法
白色的北极熊33 分钟前
C 语言 保留 2 位小数并且四舍五入输出
c语言
shirsl39 分钟前
算法 Day3-队列 / deque + 链表
数据结构·python·算法·链表
码流子1 小时前
2026 图像数据标注工具横评:LabelImg / CVAT / Label Studio / X-AnyLabeling / 国产Web平台,到底怎么选?
大数据·人工智能·算法
hansang_IR1 小时前
【题解】[JSOI2016] 最佳团体(分数规划)
c++·算法
羊羊小栈1 小时前
基于「YOLO目标检测 + 多模态AI分析」的公共场所暴力安全智能检测分析预警系统
人工智能·算法·面试·毕业设计·大作业