用筛选法求100之内的素数

用筛选法求100以内的素数 筛选法就是“埃拉托色尼筛法”,方法是在纸上写出1~1000的全部整数,然后逐个判断他们是否为素数,挖掉非素数,剩下的就是素数。 算法思想: 1、挖掉1 2、用下一个未被挖掉的数p除p后面各数,把p的倍数挖掉 3、检查p是否小于√p的整数部分,如果是,则返回2继续执行,否则结束 4、剩下的数就是素数 代码: #include<cstdio> #include<math.h> int main(){ int a[101],n=0; for(int i=1;i<=100;i++ 阅读详情

一.思路

1. 先定义一个一维整型数组,数组名为a,数组大小为100;
2. 使用for循环将1~100赋值到a[0]~a[99]中;
3. 筛选素数:
    - 素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
    1. 根据素数定义,1不是素数。
    2. 从自然数2开始筛选,即从数组元素a[1]开始遍历数组。for (int i = 1; i < 100; i++)。(将不是素数的标记为0)
    3. 根据素数定义“除了1和它本身以外不再有其他因数”,从2~7作为整除数开始循环整除
         1. 判断a[i]是否会被2~7的自然数整除,即if (a[i] % j == 0)
             1. 如果会被整除(从自然数2开始),再a[i]是否等于它本身,即if (a[i] == j)
                 1. 如果a[i]等于它本身,则执行break语句结束内循环,进行下一个外循环;
                 2. 否则,标记a[i] = 0,然后执行break语句结束内循环,进行下一个外循环。
            2. 如果不会被2整除 ,下一个内循环,即是否会被3整除...
        2. 否则,i++,继续下一个外循环。
4. 输出2~100以内标记不等于0的数。 

二.代码

#include<stdio.h>
#include<stdlib.h>
/*
	用筛选法求100以内的素数。
*/
int main()
{
	// 1.定义一个整型数组,数组大小为100
	int a[100];
	// 2.将1到100的自然数赋值到a数组中
	for (int i = 0; i < 100; i++)
	{
		a[i] = i + 1;
	}
	// 3.2 筛选素数,将不是素数的标记为0,1不是素数,从2开始,即从a[1]开始
	for (int i = 1; i < 100; i++)
	{
		// 对a[i]进行2~7整除
		for (int j = 2; j <= 7; j++)
		{
			if (a[i] % j == 0)
			{
				if (a[i] == j)
					break;		
				else
				{
					a[i] = 0;
					break;
				}
			}
		}
	}
	// 4.输出
	printf("Prime numbers up to 100 are found by screening:\n");
	for (int i = 1,k = 0; i < 100; i++)
	{
		if (a[i] != 0)
		{
			printf("%4d", a[i]);
			k++;
		}
		// 每输出10个元素,换行
		if (k % 10 == 0)
			printf("\n");
	}
	printf("\n");
	system("pause");
	return 0;
}

三.输出结果示意图

四. 注意
1.  a[i]并不是要和(2,3,4,5,6,7)这6个自然数都进行整除操作。以当a[2] = 3,a[4] = 5为例说明:
    1. 当a[i] = 3时,依据素数定义,3需要和自然数(2,3)发生整除操作:
        - 3 % 2  != 0
        - 3 % 3  == 0,此时根据定义,此时应该break语句,进行下一个数的判断。
    2. 当a[i] = 5时,依据素数定义,5需要和自然数(2,3,4,5)发生整除操作:
        - 5 % 2 != 0
        - 5 % 3 != 0
        - 5 % 4 != 0
        - 5 % 5 == 0,此时根据定义,此时应该break语句,进行下一个数的判断。
    - 如果此时只有它本身(当a[i] == 5时)才满足“整除结果为0”的操作,它本身就作为一个结束循环          标记数。即此时就不用进行后面的(6,7)整除判断。
2. 只让2~7作为整除数开始循环整除。
    - 因子中又有其因子。
    - 2的倍数。例如4的因子有2,4 % 2 == 0时,得到了因子2,就不用再判断4是否是其因子。
    - 3的倍数。例如9...。
    - 5的倍数。例如10...
    - 7的倍数。

五.总结

        自己也刚大学毕业没多久,以前大四以前代码都是看csdn的,不过大多看不懂。也怪自己手机玩多了。

        看了一下其他人的文章,前几篇文章都解释筛选法就是“将合数标记为0,然后输出不是0的数就是素数”。用的是“倍数法”,即将同倍数的标记为0.从倍数2开始,将4,6,8,...,100后标记为0;从3开始,将6,9...,99标记为0......

        倍数法的思路给我感觉是不错的,不过那些代码有点不明显。比如,部分数字会进行重复判断,应该在if语句加上当遇到已经标记为0的数应该跳过,减少判断次数。

        我可能会在意“一目了然”以及“时间和空间”。一看就懂的代码,我还是很喜欢的。如果它用到的循环+判断的次数更少的话,可能就更好了。上面的思路其实是根据素数定义的,以及常规思路(该自然数和除1和它本身的数比较),其中优化了整除对象数,2~7是我所能想到最好的。

        我后面学完这本书,我想试试能不能结合倍数流来优化代码。

        

        

C语言:用筛选法求100之内的素数(详细注释) 什么是筛选法? 筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。 程序步骤: <1> 先将1挖掉(因为1不是素数)。 <2> 用2去除它后面的各个数, 阅读详情

相关推荐

C语言习题——用筛选法求100之内的素数

本题算法思想: 挖掉1 用下一个没有被挖掉的数p去除p后面的各数,把p的倍数挖掉 检查p是否小于 sqrt( n )的整数部分(n = 1000,则检查p < 31是否成立),如果成立,则返回 第二步 继续执行。否则结束。 剩下的数就是素数,输出即可。 完整代码如下: # include <stdio.h> # include <math.h> //需要用到数学函数求平方根sqrt() int main() { int a[101]; int i, j, n;

weixin_45407633的博客 1254

用筛选法求100之内的素数(C语言 数组)

1.解释下什么是筛选法?        筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超...

s_wander的博客 9万+

统信UOS开发环境支持Java

集成了JDK和多种IDE,为开发者提供了从代码编写、编译、调试到部署的一站式开发解决方案。

RZer的博客 2254

用筛选法求100之内的素数。谭浩强《c语言程序设计》第六章第一题

题目 本题是谭浩强《c语言程序设计》第六章第一题 题目:用筛选法求100之内的素数。 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj 一、解题思路 思路: //1.素数是什么:素数就是除了1和本身没有其他因子的数。 //2.什么是筛选法?筛选法就是把一个数组中不满足条件的元素给划掉,留下没划掉的元素 二、代码部分 1.引入库 代码如下(示例): #include<stdio.h> 2.主函数部分 代码如下(示例): int main() {

立志冲海大 2516

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1095

VScode - 从入门到精通:高效开发环境搭建指南

本文是一份全面的VSCode高效开发环境搭建指南。从选择理由、安装配置、核心插件推荐到个性化设置与高效技巧,详细讲解了如何将这款轻量级编辑器武装成强大的开发工具。重点介绍了GitLens、Prettier、Live Server等必备插件,以及通过用户设置、代码片段和快捷键打造专属高效工作流的方法,帮助开发者从入门到精通。

weixin_27734811的博客 426

用筛选法求100之内的素数。

他采取的方法是,先写下1到1000的全部整数,然后逐个判断它们是否素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。筛选法是指埃拉托色尼(Eratosthenes)筛选,埃拉托色尼是古希腊的著名数学家。举个简单点例子 1–10以内的素数。

qq_52833527的博客 4190

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 490

c语言 用筛选法求100之内的素数,用筛选法求100之内的素数

用筛选法求100之内的素数//用筛选法求100之内的素数// #include #include void main(){int i,j,n,a[101];for (i=1;i<101;i++)a[i]=i;a[1]=0;for(i=2;ifor(j=i+1;j<101;j++)if(a[j]%a[i]==0) a[j]=0; for(i=1n=0,;i<101;i++){if(...

weixin_35972199的博客 1004

RISC-V V向量指令集学习笔记——访存指令

RISC-V V向量指令集学习笔记——访存指令

qq_41724469的博客 5133

微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa

微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou

🏆 前端领域优质创作者 1万+

C++ //习题 5.1 用筛选法求100之内的素数。

【代码】C++ //习题 5.1 用筛选法求100之内的素数。

Made in Code 3324

【2025最新版】间接平差——以水准网平差为例 (python详细过程版)

水准网间接平差的python代码实现。博客长期更新,本文最新更新时间为:2025年5月20日。

点云侠的博客 1702

C语言经典100题——用筛选法求100之内的素数

<1>什么是筛选法 所谓筛选法是指“埃拉托色尼筛法”,埃拉托色尼是古希腊的著名数学家。它采用的方法是,在一张纸上写上1~1000的全部整数,然后逐个判断他们是否为素数,只要找到一个非素数就把他去掉,最后剩下的数就为素数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32... <2>方法思路 (1)先把1给置0,因为他不是素数。 (2)将剩下的数(2、

yahid的博客 6249

UNet 改进(27):结合SCSE注意力机制的UNet网络实现

本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层

2401_82355416的博客 415

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

用筛选法求100之内的素数——C语言

1 筛选法 首先必须解释一下什么是筛选法!筛选法其实是把我们不需要的数给筛出掉! 本题具体做法如下: 先把N个自然数按次序排列起来,本题中直接采用数据即可; 1不是素数(质数),也不是合数,筛去; 第二个数2是素数,保留下来,把2后面所有能被2整除的数都筛去,因为这些数肯定不是素数了; 2后面第一个没筛去的数是3,3保留,再把3后面所有能被3整除的数都筛去; 3后面第一个没筛去的数是5,把5留下...

我是张跑跑 4342

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C语言6习题1 用筛选法求100之内的素数

6习题1 用筛选法求100之内的素数 代码 #include &lt;stdio.h&gt; int main() { int a[101], i, j; for (i = 1; i &lt;= 100; i++) a[i] = i; for (i = 2; i &lt;= 100; i++) { for (j = i + 1; j &lt;=...

Garuy的博客 2904

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

用筛选法求100之内的素数(C语言 数组)~易懂

1.首先解释下什么是筛选法? 筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。 2.程序步骤: <1> 先将1挖掉(因为1不是素数)。 <2> 用2去.

阿泉的博客 1万+

c语言筛选法求100之内素数,用筛选法求100之内的素数。

/*用筛选法求给出范围之内的素数。*/#include #include int isPrime(int n){//判断素数for(int i = 2; i < n; i ++){if(n % i == 0)return 0;}return 1;}int* allPrime(int scale){//这个函数要存储下来给定范围内的所有素数/*而因为这个存储函数不在main函数内,如果用数组存...

weixin_30633869的博客 1585

C语言 用筛选法求100之内的素数

#include<stdio.h> int main() { int a[100],i,j,k=0; for(i=0;i<100;i++) a[i]=i+1; for(i=1;i<100;i++) { for(j=i+1;j<100;j++) if(a[i]!=0&&a[j]!=0) { if(a[j]%a[i]==0) ...

weixin_42323643的博客 3023

C语言经典--用筛选法求100之内的素数

//用筛选法求100内的素数,质数别名素数,指除了1和本身外无其他因数的自然数 #include<stdio.h> #include<math.h> int main() { int i,j,n,a[101]; for(i=1;i<=100;i++) //a[0]不用 { a[i]=i; // 赋值1-100 } a[1]=0; //去除数字1 挖掉a[1] for(i=2;i<sqrt(100);i++) //如果需要找1-

weixin_44358746的博客 3142

筛选法求100之内的素数

各数作为除数去除这些数以后的各数。事实上,可以简化,如果需要找1~n的素数表,只须进行到除除数为。编写程序,可以定义一个数组array,数组元素array[1]~array[n]分别代表1-n这n个数。筛选法(古希腊著名数学家埃拉托色尼提出):在一张纸上写上1-1000的全部整数,然后逐 个判断它们是不是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。(2)用2去除它后面的各个数,把能把2整除的数挖掉,即把2的倍数挖掉。(2)用下一个未被挖去的数p去除p后面各数,把p的倍数挖掉。

2401_84379088的博客 659
上一篇: C程序设计(第五版)谭浩强p138第16题,输出一个菱形图案
想吃海鲜196
博客等级 码龄7年 28粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值