活动介绍
file-type

白盒测试方法:找出素数

下载需积分: 31 | 6.63MB | 更新于2024-08-23 | 126 浏览量 | 1 下载量 举报 收藏
download 立即下载
"找出到某个整数之间的所有素数-第2次-3 (第3章 测试分析与设计——测试方法)" 这篇资料主要涉及的是编程中的算法问题,特别是寻找素数的过程,以及软件测试的一些基础概念。在编程方面,问题的核心是实现一个程序,找出1到给定整数`limit`之间的所有素数。以下是详细的解释: 1. 素数查找算法: - 用户输入一个整数`limit`。 - 首先检查`limit`是否小于等于0,如果是,则输出错误信息并结束程序。 - 使用循环,从2开始(因为2是最小的素数),逐个检查每个数是否为素数。 - 对于每个数`i`,如果`i`小于等于`limit`,就判断它是否是素数。判断方法通常包括用2到`i`的平方根范围内的每个数去除`i`,若都不能整除,则`i`为素数。 - 如果`i`是素数,就输出这个数。 - 循环结束后,程序结束。 2. 软件测试基础知识: - 白盒测试:也称为结构测试或逻辑驱动测试,这种测试方法要求测试人员了解软件的内部工作原理。测试用例的选择基于程序的逻辑覆盖,如语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖等,以确保软件的各个部分都得到了适当的测试。测试覆盖率是评估测试用例质量的一个重要指标。 - 语句覆盖:确保程序中的每个可执行语句至少被执行一次。在程序流程图示例中,通过不同的测试用例执行所有可能的路径以覆盖每条语句。 - 判定覆盖:每个逻辑判断的真假状态至少应被测试一次。 - 程序流程图:是描述程序执行流程的图形表示,帮助理解代码的逻辑结构。 这些知识点展示了软件开发过程中的一个重要环节,即验证代码正确性。测试是确保软件质量的关键步骤,而素数查找算法是基础数学问题在编程中的实际应用。在实际编程项目中,理解并运用这些概念可以帮助我们编写更可靠和高效的代码,并通过系统测试确保其正确性。

相关推荐

filetype

第1关:素数判断 200 学习内容 参考答案 记录 评论67 任务描述 相关知识 如何判断一个正整数是否是素数 编程要求 测试说明 任务描述 本关任务:编写一个能判断一个整数是否是素数的小程序。 相关知识 为了完成本关任务,你需要掌握: 如何判断一个正整数是否是素数。 如何判断一个正整数是否是素数 素数(Prime Number),又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则,称为合数(Composite Number)。1既不是素数,也不是合数。 如2、3、5、7、11都是素数,因为找不到除了1和其本身之外的约数;而4、6、8都是合数,因为4可以整除2,6可以整除2和3,8可以整除2和4。 而一个数的约数必然是不超过该数的,加上素数必需是只有1和本身是其约数的条件。于是,我们可以通过枚举小于该数,并且大于1的整数,来判断该数是否是素数。 假设有一个正整数a,则其可以被写成任意两个正整数之积,即a = p * q。假设p < q,那么正整数p和q都是a的约数。注意到,如果我们知道p是a的约数,那么可以通过q = a / p快速求得另外一个约数q。同样的道理,如果某个数p不是a的约数,那么q也不是a的约数。这就意味着我们在枚举约数的时候,只需要枚举2到不大于sqrt(a)的正整数即可。 虽然通过上述方法,已经能让我们在根号级别的复杂度内,判断一个正整数是否为素数。但是我们其实还可以做得更快!回到我们最初的起点,我们之所以要枚举这些数,就是想找出原数的约数。然后除1外,任何一个正整数都能写成多个素数的乘积的形式,所以我们枚举特定范围内的所有素数,也能达到相同的效果,而且数字范围越大,其区间内素数个数和区间长度之比也将越来越小,大家可以看看下面不同区间内的素数统计结果: 从上图的统计结果我们可以发现,我们用区间内的素数去判断一个整数是否素数,比较的次数相较之前来说更少。虽然就单次判断一个素数来说,这样的算法可能并没有优势,因为还需要时间去求出该区间内的所有素数。但是如果需要判断的数字很多,那么先把该区间内的所有素数求出来,无疑是个更好的选择。 而求不超过某个正整数x内的所有素数,有一个著名的算法——埃拉托斯特尼筛法。其算法描述为: 先用一个数组vis,把不大于该正整数x的所有正整数标记为0,表示没有访问; 然后从第一个素数2开始遍历整个区间,如果当前访问的数没有访问过,则可以认为它是一个素数。那么就将它在该区间内所有的倍数,全部标记为已访问,这样就保证外部的循环发现的没有访问过的数都是素数。 其具体实现如下述代码所示: def sieve(x): vis = [0 for i in range(x+1)] prime_table = [] for i in range(2, x+1): if vis[i] == 0: prime_table.append(i) for j in range(i*2, x+1, i): vis[j] = 1 return prime_table 然而,除了上述筛法,还有其他高效的筛法,比如欧拉筛法,这里只给出其代码实现,希望大家能仔细去体会。 def ouler(x): vis = [0 for i in range(x+1)] prime_table = [] ln = 0 for num in range(2, x+1): if vis[num] == 0: prime_table.append(num) ln += 1 for j in range(ln): if num * prime_table[j] > x: break vis[num * prime_table[j]] = 1 if num % prime_table[j] == 0: break return prime_table 编程要求 根据提示,在右侧编辑器Begin-End区间补充代码,实现判断一个正整数是否是素数。如果是,则返回True,否则返回False(注意,返回值是布尔值)。 提示:如