筛选法求素数&一般方法求素数&判断一个数是否是素数

用筛选法求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.判断一个数是否是素数

 

#include<stdio.h>
#include<math.h>
int main()
{
	int n, i, k;
	printf("please enter a integer number");
	scanf_s("%d", &n);
	k = sqrt(n);
	for (i = 2; i < k; i++)
		if (n % i == 0)break;

	if (i <= k)printf("%d is not a prime number.\n", n);
	else printf("%d is a prime number.\n", n);
	return 0;
}
  • 运行结果


2.筛选法求素数(以求200以内素数为例) 

 

1.解释下什么是筛选法?

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

2.程序步骤:

 

<1> 先将1挖掉(因为1不是素数)。

<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

<3> 用3去除它后面的各数,把3的倍数挖掉。

<4> 分别用5…各数作为除数去除这些数以后的各数。

3.具体应用(求100以内的素数):

 

        基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列,把不是素数的数全部赋值为0,最后只输出不是零的数即素数。1不是素数,首先把它换为0。剩下的数中选择最小的数是素数,然后把它的倍数全部换为0。依次类推,直到结束。

如有:

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
1不是素数,换为0。剩下的数中2最小,是素数,然后把它的倍数全部换为0,余下的数是:
0 2 3 0 5 0 7 0 9 0
11 0 13 0 15 0 17 0 19 0
21 0 23 0 25 0 27 0 29 0
剩下的数中3最小,是素数,然后把它的倍数全部换为0,如此下去直到所有的数都被筛完,求出的素数为:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97      (载至路漫漫其修远兮sjw)

#include <stdio.h>
#include <math.h>
#define N 200
int main()
{
    int i, j, n, a[N+1];
    for (i = 1; i < N; i++)
    {
        a[i] = i;
    }
    a[0] = 0;
    for (i = 2; i <= sqrt(N); i++)//筛选
    {
        for (j = i + 1; j <=N; j++)
        {
            if (a[i] != 0 && a[j] != 0)
                if (a[j] % a[i] == 0)
                {
                    a[j] = 0;
                }
        }
    }
    printf("\n");
    for (i = 2, n = 0; i < N; i++)
    {
        if (a[i] != 0)
        {
            printf("%5d", a[i]);
            n++;
        }
        if (n == 10)//控制换行
        {
            printf("\n");
            n = 0;
        }
    }
    return 0;
}
  • 运行结果 


3.一般法求素数 (200以内)

     sqrt是求平方根的函数,其对参数的要求是双精度,在执行时会自动将 i 转换为双精度数,求出的函数值也是双精度,再把它赋值给k,系统会自动舍弃小数部分,将整数部分赋给k。

#include <stdio.h>
#include <math.h>
#define N 200
int main()
{
    int i, j, k, n = 0;
    for (i = 101; i <= N; i = i + 2)
    {
        k = sqrt(i);
        for (j = 2; j <= k; j++)
        {
            if (i % j == 0)break;

        }if (j >= k + 1)
        {
            printf("%5d", i);
            n++;
        }
        if (n % 10 == 0)//控制换行
        {
            printf("\n");
        }
    }
    return 0;
}
  • 运行结果 

     作者也不知道为什么会有这么多空行,有知道的大佬可以留言。 

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

相关推荐

【打印100之内的素数——筛选法】

打印100之内的素数——筛选法

qq_73900397的博客 448

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

用筛选法求100以内的素数

cccccczl0131的博客 7221

素数筛选法+记录给定范围内素数的个数(高效率)

当一个数不算大的时候,可以用普通的求素数的方法去求,但是如果一个数过大的话,就像让求1-十亿之间素数的个数,普通方法就不行了,这事就需要用到素数筛选法,他的时间复杂度是O(n),尽管不算很好,但是,也算是目前为止比较快的一种方法了,它是以空间换取时间,现在的计算机,空间有的是,但是时间是非常珍贵的。效率问题特别重要。他的原理就是标记,防止重复判断,这样提高了效率。就像2是素数,所有是2的倍数的肯定

coco_astrids的博客 4971

C语言-筛法求100以内素数

1.描述用筛法输出100以内的所有素数。 筛法是求不超过自然数N(N&gt;1)的所有素数的一种方法。据说是古希腊数学家埃拉托斯特尼(约公元前274~194年)发明的,又称埃拉托斯特尼筛法。具体做法是:先把N个自然数依次排列起来。1不是素数,也不是合数,要划去。第二个数2是素数留下来,而把2后面所有能被2整除的数划去。2后面第一个没有划去的数是3,把3留下,再把3后面所有能被3整除的数划去。3后面第一个没有划去的数是5,把5留下,再把5后面所有能被5整除的数划去。\cdots⋯,这样一直做下去,就会把不超

Cotton_imstd的博客 1万+

素数的判断与筛选

这个筛选方式不是特别快,不是线性时间,因为对于一个相同的数,比如18,会被2筛选出,也会被3筛选出,即对于一个数会被重复的判断是否为素数,那么如果我们可以让一个数只通过一次判断就可以知道是素数,那么就变成线性时间了,即O(n)的时间复杂度。主要思想就是保证每个合数只被筛选一次,如12,会被2,3,4,6,等都会筛选到,如果j等于i*i的话会被2,3重复筛到,所以这里用欧拉筛来改进这个方法。它的原理就是维护一个素数表,当遇到数i时,先判断是不是素数,是的话,加到素数表,然后让i。

2301_79908467的博客 1052

筛选法求质数

筛选法求质数(求小于等于N的所有素数) 一般的思路:对2~N的每一个数循环判断是否是素数,时间复杂度为N的3/2次方 算法思路: (筛选法)依次筛去2~N中小于等于根号N的数的倍数 #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;ctime&gt; #define N...

qq_44651133的博客 917

C语言筛选法求素数

素数的定义:素数也即质数;在大于1的自然数中,除了1和他本身以外没有其他的因数,我们称之为素数。 问题:求出1-100之内的素数。 方法1,利用定义直接遍历 #include&lt;stdio.h&gt; #include&lt;math.h&gt; //思路:优化了j的范围而非(2-i)因为如果一个数不能被从2到其开方的数整除,其即为素数 //时间复杂度:nlog2n void main()...

林立可 9427

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7447

【C语言】筛选法求素数

判断素数的方法

weixin_63449996的博客 9555

AUTOSAR FEE 换页机制深度解析:从原理到实现逻辑

​​没有磨损均衡的EEPROM模拟,如同在沙地上建造城堡​​ ——AUTOSAR存储系统设计箴言

汽车电子软件领域知识分享 1338

PTGui使用教程

PTGui使用教程为啥使用ptgui开始使用ptgui 为啥使用ptgui ptgui是一个全景拼接软件,在海思hi3559上做视频拼接的时候,需要拼接参数,这是就需要使用到ptgui,这里可以在该网站下下载ptgui:下载地址 开始使用ptgui 第一步,加载图片,我这里添加了三幅图 然后添加控制点(可以先多对准几次图像,这样会自动生成一些控制点,但是不保证准确),建议控制点不要太密集 点开镜头设置,勾选以下几个选项以及配置好镜头类型,如下图 点开优化器,在高级界面中配置如下参数,最后点

what_wrong的博客 1万+

经典算法——筛选法求素数(素数筛选)

[数值问题]素数筛选 内存限制:128 MB时间限制:1.000 S 题目描述 输入一正整数n(2&lt;=n&lt;=5*10^6),按顺序输出2到n范围内的所有素数。 输入 输入共一行一个数,表示n的值。 输出 输出若干行,每行5个素数,用空格隔开。 样例输入 20 样例输出 2 3 5 7 11 13 17 19 素数在很多应用领域有很重要的用途,寻找一个高效的算法十分重要。例如,找出10000以内的素数可能仅仅是为某个程序做的准备工作,为提高程序的效率,希望在尽可能短的时

捉只树袋熊的博客 7946

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Science prince的博客 3535

筛选法求素数———C语言

筛选法是一种求出一定范围内素数的方法,顾名思义,人们在纸上写下一串自然数,通过筛选法的操作将不是素数的数从纸上撕下来,留下一个个小孔。最后,纸张像筛子一样,得名筛选法。

萌新xiaoxu的博客 5538

RK3568平台(USB篇)USB Gadget 驱动

USB 设备驱动,按照设备端关联的 USB 控制器 是工作在 主模式 还是 从模式,分为 USB 设备主机侧驱动 (主模式),或者 USB 设备从机侧驱动 (从模式)。同时,工作在 主模式 的 USB 控制器,称为 USB 主机控制器 (UHC: USB Host Controller),工作在 从模式 的 USB 控制器,称为 USB 设备控制器 (UDC: USB Device Controller)。有的 USB 控制器,只能工作在 主模式 或 从模式 中的某一种;

weixin_49303682的博客 1438

图解B+树的插入过程

B+ 树在现代数据库中很常见,如果我们了解它,在工作中可能对性能优化会有更好的帮助! 最近我一直在思考 B+ 树的高度是由什么决定的。知道我了解了 B+ 树的插入过程,才有一种恍然大悟的感觉! 网上的一些资料杂乱无章,不同的数据库可能还有对 B+ 树有不同的实现。但是万变不离其宗,B+ 树的定义,大致如下所示: 总结一下,B+ 树有下面 5 个重要的特点。 B+ 树包含 2 种类型的结点: 内部结点(也称索引结点)和叶子结点。 根结点本身即可以是内部结点,也可以是叶子结点。 根结点的关键字个数最

愿君出走半生,归来时仍是少年 2134

筛选法求素数

筛选法求素数要比普通的求素数方法更加快速,虽然在一些小范围内看不出多大差别,但是当范围大到一定程度,普通求素数的方法就会显得比较耗时,在做一些编程题的时候特别容易超时 我们就拿1000以内的素数来说 普通的方法(可能和我的不一样,但是都是按照定义来的,意思差不多) #include&lt;iostream&gt; using namespace std; int main() { int a[2...

记录博主学到的点滴 1486

全球建筑物提取数据集(免费下载):微软/GlobalMLBuildingFootprints

这个是GitHub上的开源数据集: https://github.com/microsoft/GlobalMLBuildingFootprints 介绍 必应地图正在世界各地发布开放式建筑足迹。我们从 2014 年到 2021 年间的 Bing Maps 图像中检测到了 7.77 亿座建筑物,包括 Maxar 和 Airbus 的图像。数据可在 ODbL 下免费下载和使用。该数据集补充了我们的其他版本。 包括的地区 执照 此数据由 Microsoft 根据Open Dat..

此星光明博客 6289

Python-蒙特·卡罗方法计算圆周率近似值、筛选法求素数、猜数游戏

1、使用蒙特·卡罗方法计算圆周率近似值 蒙特· 卡罗方法是一种通过概率来得到问题近似解的方法, 在很多领域都有重要的应用,其中就包括圆周率近似值的计算问题。假设有一块边长为 2 的正方形木板,上面 画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以 4,这个数字会无限逼近圆周率的值。这就是蒙...

君琴 的博客 4800

innovus:如何在init design之后新增参考库(lib/lef)

如题,在PR过程中经常会遇到这种问题,时序无法收敛,需要新增一套lvt或者hpc的库,怎么办?

m0_61544122的博客 5007

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【算法】普通方法和筛选法求素数

素数指的是因子只有1和本身的数(1不是素数),求解素数在数学上应用非常广泛,而求解n以内的素数也是我们编程时常遇到的问题,在这个问题上,筛选法求解素数运行得非常快。下面首先介绍如何判断一个是不是素数,然后介绍用普通方法求n以内的素数,接着是筛选法求n以内的素数,最后是两种算法的运行时间比较判断一个数是不是素数算法思想:判断小于等于一个数的平方的所有大于1的整数是不是能整除这个数,如果能,则表明这个数

zgljl2012的专栏 6609

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

筛选法求素数改进

以前稍微总结了下求素数的办法。但是无奈效率都不高。 今天逛了很多关于求素数的博客,于是总结了一下最终写出了一个筛选法的改进算法。 筛选法: (一般筛选法)这种方法比较好理解,初始时,假设全部都是素数,当找到一个素数时,显然这个素数乘上另外一个数之后都是合数(注意上面的 i*i ,  比 i*2 要快点 ),把这些合数都筛掉,即算法名字的由来。 但仔细分析能发现,这种方法

slime_kirito的专栏 1423

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

s_wander的博客 9万+

用简单素数筛选法求N以内的素数。

题目描述 用简单素数筛选法求N以内的素数。 输入 N 输出 2~N的素数 样例输入 100 样例输出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 #include&lt;stdio.h&gt; int main() { int n, i, m; int isPrime=1; //设置一个标志来确定是否是素数 scanf("%d", &amp;n); for(m=2; m&lt;=n; m++){

Lau的博客 4464

求N以内素数个数--粗暴方式及筛选法

素数,是除了1和它本身之外不再被其他的除数整除。 使用程序求N以内素数个数问题,在各种语言的基础教程中都会讲到。 一般而言,求取素数可以使用粗暴的从2开始遍历到自己,每次拿自己整除这些遍历的数,若可以整除,则不是素数并跳出循环。若遍历到自己都不能被整除,则是素数。 这种方法虽然简单,但是效率十分低下。有兴趣的可以测试一下程序,当N》=100000时,程序便会非常的慢了。 另外一种比较高效的

wangshuang1631的博客 3434
上一篇: 10个数比大小(排序)——冒泡和选择
下一篇: 将一个四位数 反向输出
Player_HA
博客等级 码龄6年 43粉丝 17原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值