杭电ACM筛选法讲解-素数判断与优化
需积分: 9 159 浏览量
更新于2024-07-14
收藏 490KB PPT 举报
"杭电ppt筛选法用于ACM程序设计,讲解了如何高效地判断素数及筛选素数的方法,包括朴素算法优化和筛选法的应用。"
在ACM(国际大学生程序设计竞赛)中,高效的算法是解决问题的关键。这篇资料主要讲解了两个关于素数判断和求解的问题,以及相应的算法优化。首先,我们来看一个基础的素数判断问题。
题目描述:给定一个正整数N(1 < N < 100000),判断N是否为素数。对于这个问题,通常的朴素算法是遍历从2到N的所有数,若存在一个数能整除N,那么N就不是素数。以下是一个简单的C语言实现:
```c
#include<stdio.h>
int main() {
int i, n;
while(scanf("%d", &n) == 1) {
for(i = 2; i < n; i++) {
if(n % i == 0) break;
}
if(i == n) printf("YES\n");
else printf("NO\n");
}
}
```
虽然这个算法可以解决问题,但效率较低,尤其是当N较大时。为了优化,我们可以只检查到N的平方根,因为一个大于平方根的因子必然对应着一个小于平方根的因子。这是优化后的代码:
```c
#include<stdio.h>
#include<math.h>
int main() {
int i, n, x;
while(scanf("%d", &n) == 1) {
x = (int)sqrt(n);
for(i = 2; i <= x; i++) {
if(n % i == 0) break;
}
if(i > x) printf("YES\n");
else printf("NO\n");
}
}
```
接下来是第二个问题,要求输出所有小于等于N的素数。这个问题使用朴素算法会导致效率极低,因为需要不断地重复判断。为了解决这个问题,引入了筛选法(也称埃拉托斯特尼筛法)。筛选法的基本思想是,从2开始,将所有素数的倍数标记为非素数,以此排除它们。以下是筛选法的步骤:
1. 初始化一个长度为N+1的数组,所有元素设为0,表示假设所有数都是素数。
2. 从2开始,将2的倍数全部标记为1,表示它们不是素数。
3. 移动到下一个未被标记的数(这里是3),同样将其所有倍数标记为1。
4. 重复此过程,直到遍历完所有小于等于N的数。
5. 数组中值仍为0的索引对应的数即为素数。
通过筛选法,我们可以快速找出指定范围内的所有素数,显著提高了算法效率。这种方法在处理大量素数计算或需要筛选素数的场景中非常有用,尤其在ACM等编程竞赛中,对算法的时间复杂度有较高要求时,显得尤为重要。
2011-01-01 上传
2023-05-12 上传
2023-06-10 上传
2023-03-28 上传
2023-05-30 上传
2023-06-09 上传
2023-05-30 上传
欧学东
- 粉丝: 656
- 资源: 2万+
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升