【C、C++系列-1】C语言实现:寻找[1,100]之间的素数
1. 问题
C语言实现:寻找[1,100]之间的素数
2. 实现代码
#include <stdio.h>
#include <math.h>
int isPrimeNumber(int number) {
if (number <= 1) {
return 0;
} else {
if (number == 2) {
return 1;
}
if (number % 2 == 0) {
return 0;
}
double numberSqrt = sqrt(number);
for (int i = 3; i <= numberSqrt; i += 2) {
if (number % i == 0) {
return 0;
}
}
return 1;
}
}
void printPrimeNumber(int low, int high) {
for (int i = low; i <= high; i++) {
if (isPrimeNumber(i)) {
printf("%d ", i);
}
}
printf("\n");
}
int main(void) {
int low, high;
printf("请输入寻找素数范围的上、下区间,两个数字间用空格隔开,敲回车输入完毕:\n");
scanf("%d %d", &low, &high);
printf("%d 到 %d 之间所有的素数为:\n", low, high);
printPrimeNumber(low, high);
getchar();
getchar();
return 0;
}
3. 执行结果
执行结果:
请输入寻找素数范围的上、下区间,两个数字间用空格隔开,敲回车输入完毕:
1 100
1 到 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
4. 解决方法说明——穷举法
基本概念:穷举法(Exhaustive Attack method),它是一种最为直接,最容易实现,同时又最为耗时的一种解决问题的算法思想。
穷举法算法的基本思想是:在可能的解空间中穷举出每一种可能的解,并对每一个可能解进行判断,从中得到问题的答案。
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。
若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。
用穷举法解题时,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:
-
(1)顺序列举 是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。
-
(2)排列列举 有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。
-
(3)组合列举 当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。
暴力搜索或穷举搜索,在计算机科学中也称生成与测试,是一种非常低效的解决问题的技术,方法包括了系统地枚举解决方案的所有可能候选项,以及检查每个候选项是否符合问题描述。
找出自然数n的约数的暴力搜索算法将枚举出从1到n的所有整数,并检查它们中的每一个是否除n后没有余数。针对八皇后问题的暴力搜索算法会检查所有在8X8棋盘上八个“皇后”可能的摆放方法,并且,对每一种摆放方法,检查其每一个“皇后”是否能攻击到其它人。
虽然暴力搜索很容易实现,并且如果解决方案存在,它就一定能够找到。但是它的代价是和候选方案的数量成正比,由于这一点,在很多实际问题中,消耗的代价会随着问题规模的增加而快速地增长。因此,当问题规模有限,或当存在可用于将候选解决方案的集合减少到可管理大小的针对特定问题的启发式算法时,通常使用暴力搜索。另外,当实现方法的简单度比速度更重要的时候,也会用到这种方法。
例如,在关键的应用中,或当用计算机证明数学定理时,算法中的任何错误将会导致严重的后果。暴力搜索也可在其他基准化算法和启发式算法里用作基准方法。事实上,暴力搜索可以被看作最简单的启发式算法。暴力搜索与回溯概念是不相同的,在回溯算法中,大量的解决方案并没有被枚举而直接被丢弃(例如上文提到的“八皇后问题”的解决方案)。用于在表中查找一个项目,也就是说顺序地检查表中所有条目的暴力方法被称为线性搜索。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)