C语言 - 判断素数

article/2025/9/20 19:28:00

定义:

素数(Prime number,又称质数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数

思路一:试除法

1.如果数字 i 能被 2 ~ i-1 整除,说明 i 就是素数

代码(V1):

#include<stdio.h>
int main()
{int i = 0;//统计素数个数int count = 0;for (i = 100; i <= 200; i++){//flag为1表示是素数int flag = 1;int j = 0;//产生2~i-1的整数for (j = 2; j < i; j++){if (i % j == 0){flag = 0;}}if (flag == 1){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

2.上述代码可进行优化,我们试除的范围是2 ~ i-1,但实际上从 i/2 ~ i-1之间的数是多余的,因为如果一个数不能被3整除,那么它一定不能被6整除,优化后的范围为[i/2,i-1],工作量减小一半

代码(V2):

include<stdio.h>
int main()
{int i = 0;//统计素数个数int count = 0;for (i = 100; i <= 200; i++){//flag为1表示是素数int flag = 1;int j = 0;//产生2~i/2的整数for (j = 2; j <= i/2; j++){if (i % j == 0){flag = 0;}}if (flag == 1){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

3.继续进行优化,如果数字 i 可以写成 i = a × b,那么说明a和中至少有一个数字是<= 开平方 i 的,若能在 2 ~ 开平方i 之间有一个数能整除i,那么说明后面也有一个数能整除i,否则就说明后面也不可能有一个数能整除i

代码(V3):

#include<stdio.h>
#include<math.h>
int main()
{int i = 0;//统计素数个数int count = 0;for (i = 100; i <= 200; i++){//flag为1表示是素数int flag = 1;int j = 0;//产生2~开平方i的整数for (j = 2; j <= sqrt(i); j++){if (i % j == 0){flag = 0;}}if (flag == 1){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

4.在上述优化基础上,我们知道偶数不可能是素数,因此还可以优化

代码(V4):

#include<stdio.h>
#include<math.h>
int main()
{int i = 0;//统计素数个数int count = 0;//只统计范围内奇数中素数个数for (i = 101; i <= 200; i+=2){//flag为1表示是素数int flag = 1;int j = 0;//产生2~开平方i的整数for (j = 2; j <= sqrt(i); j++){if (i % j == 0){flag = 0;}}if (flag == 1){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

运行结果:

 

思路二:筛法

最小的素数是2,我们先去除所有能被2整除的数,此时素数是3,去掉所有能被3整除的数,以此类推,如思路一v3所述,只需要在数组元素的值小于等于所求的最大范围i的开平方时进行此操作即可,去掉所有小于等于开平方i的所有数的倍数,剩下的数就是素数

 代码:

#include<stdio.h>
#include<math.h>
int main()
{int i = 0;int arr[200] = { 0 };//统计素数个数int count = 0;//将2~200的数放入数组中for (i = 0; i < 200; i++){arr[i] = i + 2;}int j = 0;//当数组元素小于开平方i才进入循环while (arr[j] <= sqrt(200)){//遍历数组元素,数组首元素为素数2,下标为0,作为除数//那么首个被除数应该从下标为1的数3开始向后遍历for (i = j + 1; i < 200; i++){//将能被素数整除的数组元素置为0if (arr[i] % arr[j] == 0){arr[i] = 0;}}j++;//此时被置为0的数都不是素数,无需判断while (arr[j] == 0){j++;}}for (i = 98; i < 200; i++){//在上述操作执行结束后,只有尚未被置0的数才是素数if (arr[i] != 0){count++;printf("%d ", arr[i]);}}printf("\ncount=%d\n", count);return 0;
}

运行结果:

 


http://chatgpt.dhexx.cn/article/ySt8jW5N.shtml

相关文章

函数判断素数

1、实现一个函数&#xff0c;判断一个数是不是素数。 2、利用上面实现的函数打印100到200之间的素数。 素数的定义&#xff1a;素数是指大于一的整数中&#xff0c;只能被1和这个数本身整除的数。 假设这个数是n&#xff0c;那么用for循环去遍历&#xff0c;在2——n-1&…

C语言判断素数

素数又称质数。所谓素数是指除了 1 和它本身以外&#xff0c;不能被任何整数整除的数&#xff0c;例如7就是素数&#xff0c;因为它不能被 2~6 的任一整数整除。注意&#xff1a;一般情况下&#xff0c;质数合数只是针对于非零自然数而言&#xff0c;负数没有质数合数一说。 思…

用python判断素数_python判断素数

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 质数(prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。 那么想计…

判断素数的方法(全部方法)

功能 最快、最合适地判断一个数为素数 说明 分为打表法和单个判断法两类方法 打表法 是开始时将所有素数标记出来&#xff0c;适合多次调用判断&#xff0c;前两种属于打表法 单个判断法 则是只一个数一个数判断&#xff0c;适合少量判断来节省时间&#xff0c;后俩种属…

c语言判断素数(c语言判断素数)

C语言中素数判断 是素数就返回1&#xff0c;不是的话返回0。 int IsPrime(int n) int i; if (n 1 || n 2 || n 3 || n 5) return 1; else if (n % 2) for (i 3; i < n / 2 1; i 2) if (n % i 0) return 0; return 1; else return 0; } 代码如下&#xf…

C语言判断素数的三种方法 判断素数(质数)

题目&#xff1a; 方法一&#xff1a;在2到n-1之间任取一个数,如果n能被整除则不是素数&#xff0c;否则就是素数 代码示例如下&#xff1a; #include <stdio.h> int main() {int i,n;printf("Please input: ");scanf("%d",&n);for(i2;i<n-…

C语言判断素数(求素数)

C语言判断素数&#xff08;求素数&#xff09; 素数又称质数。所谓素数是指除了 1 和它本身以外&#xff0c;不能被任何整数整除的数&#xff0c;例如17就是素数&#xff0c;因为它不能被 2~16 的任一整数整除。 思路1)&#xff1a;因此判断一个整数m是否是素数&#xff0c;只需…

Flink自定义生成 Watermark

Watermark 策略简介 # 为了使用事件时间语义&#xff0c;Flink 应用程序需要知道事件时间戳对应的字段&#xff0c;意味着数据流中的每个元素都需要拥有可分配的事件时间戳。其通常通过使用 TimestampAssigner API 从元素中的某个字段去访问/提取时间戳。 时间戳的分配与 wat…

Flink学习:WaterMark

WaterMark 一、什么是水位线?二、案例分析三、如何生成水位线?(一)、在SourceFunction中直接定义Timestamps和Watermarks(二)、自定义生成Timstamps和Watermarks 一、什么是水位线? 通常情况下,由于网络或系统等外部因素影响,事件数据往往不能及时传输至Flink系统中,导致数…

flink watermark

flink1.12版本开始&#xff0c;事件事件作为默认的时间语义 watermark是flink逻辑时钟&#xff0c;不是真正意义上的表&#xff0c;而是靠着数据去推动它的时间不停的往前走 工厂生产的商品上面印有时间戳&#xff0c;八点到九点的商品要坐一班车运走&#xff0c;商品从生产到…

Flink WaterMark 详解

摘录仅供学习使用&#xff0c;原文来自&#xff1a; Flink详解系列之五--水位线&#xff08;watermark&#xff09; - 简书 1、概念 在Flink中&#xff0c;水位线是一种衡量Event Time进展的机制&#xff0c;用来处理实时数据中的乱序问题的&#xff0c;通常是水位线和窗口结合…

Flink:watermark

Table of Contents 三种时间概念 Processing time Event Time Ingestion time watermark 并行流的Watermarks 迟到的事件 watermark分配器 watermark的两种分配器 三种时间概念 在谈watermark之前&#xff0c;首先需要了解flink的三种时间概念。在flink中&#xff0c;…

Flink 水位线(Watermark)

文章目录 什么是水位线水位线的特性如何生成水位线Flink 内置水位线生成器自定义水位线策略在自定义数据源中发送水位线水位线的总结 在实际应用中&#xff0c;一般会采用事件时间语义。而水位线&#xff0c;就是基于事件时间提出的概念。一个数据产生的时刻&#xff0c;就是流…

vue -- watermark水印添加方法

作者&#xff1a;蛙哇 原文链接&#xff1a; https://segmentfault.com/a/1190000022055867 来源&#xff1a;segmentfault 前言 项目生成公司水印是很普遍的需求&#xff0c;下面是vue项目生产水印的方法。话不多说&#xff0c;复制粘贴就可以马上解决你的需求。 步骤1 创建…

tp-watermark.js网页添加水印插件

tp-watermark.js网页添加水印插件 作者&#xff1a;鹏仔先生 上周五&#xff0c;出差去改上个前端遗留的小问题&#xff0c;用到了watermark.js这个网站添加水印插件&#xff0c;功能很简单&#xff0c;就是给网页添加个水印&#xff0c;我看了下网上&#xff0c;有很多种&…

实用有效!React项目中使用watermark.js添加水印效果

为了避免公司的内部文档被截图外泄&#xff0c;有必要在系统页面上面增加水印。 第一步&#xff1a; 下载依赖包&#xff1a; npm install watermark-dompackage.json中会添加一个依赖如下&#xff1a; "watermark-dom": "^2.3.0"第二步&#xff1a; 引…

Flink之水位线(Watermark)

在流数据处理应用中&#xff0c;一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”&#xff0c;一般就是划定的一段时间范围&#xff0c;也就是“时间窗”&#xff1b;对在这范围内的数据进行处理&#xff0c;就是所谓的窗口计算。所以窗口和时间往往是分不开的。接下来…

水印watermark

第一步:npm获取水印组件包 npm install watermark-dom 第二步:引入水印模块 import watermark from ‘watermark-dom’ 或者 var watermarkDom require(“watermark-dom”) 根据业务需要&#xff0c;我是登入之后的页面才有水印&#xff0c;前者我是放在验证用户登录状态js文件…

Flink流计算编程--watermark(水位线)简介

1、watermark的概念 watermark是一种衡量Event Time进展的机制&#xff0c;它是数据本身的一个隐藏属性。通常基于Event Time的数据&#xff0c;自身都包含一个timestamp&#xff0c;例如1472693399700&#xff08;2016-09-01 09:29:59.700&#xff09;&#xff0c;而这条数据…

Flink之watermark(水印)讲解

flink中watermark的详细介绍 使用前提&#xff1a; 处理数据开窗&#xff0c;处理数据的时间语义是事件时间&#xff0c;也就是每条数据产生的时间。 使用场景&#xff08;解决问题&#xff09;&#xff1a; 处理乱序数据&#xff1a;flink中是实时处理数据&#xff0c;但是…