C++实现素数判断:优化算法降低循环次数

需积分: 35 1 下载量 132 浏览量 更新于2024-08-19 收藏 8.66MB PPT 举报
"C++程序设计 - 谭浩强完整版" 在C++程序设计中,求解素数是一项基础任务。素数是仅能被1和自身整除的正整数。给出的代码片段展示了如何判断一个整数是否为素数。以下是这段代码的详细解释: ```cpp for( i=2; i<t ; i++) { if(t%i==0) { break; } } if (i==t) { cout<<“是素数。\n”; } else { cout<<“不是素数\n”; } ``` 这段代码首先从2开始(因为2是最小的素数)循环到`t-1`,检查每个数是否能整除`t`。如果找到一个能整除`t`的数(即`t % i == 0`),那么`t`不是素数,跳出循环。如果循环结束后`i`仍然等于`t`,这意味着没有找到能整除`t`的数,所以`t`是素数。 然而,这个循环可以进一步优化。因为任何大于`t/2`的数都不可能整除`t`,所以可以将循环的上限减少到`t/2`。这样,我们只需要检查到`t/2`就足够了,这会显著减少循环次数,提高效率: ```cpp int limit = std::sqrt(t); // 使用平方根提高效率 for( i=2; i<=limit ; i++) { if(t%i==0) { break; } } if (i>limit) { cout<<“是素数。\n”; } else { cout<<“不是素数\n”; } ``` 在这个优化版本中,我们使用了`std::sqrt()`函数来计算`t`的平方根,将循环上限设为`limit`。这是因为如果`t`有一个因子`f`,那么`f * f = t`,其中`f`要么小于或等于`t/2`,要么大于或等于`t/2`。如果`t`有一个大于`t/2`的因子,那么必然存在一个小于或等于`t/2`的因子与之对应。 C++语言的发展历程始于BCPL和B语言,最终演变为C语言,由Dennis Ritchie和Brian Kernighan设计。C++是在C语言的基础上添加了面向对象特性并进行扩展的,它保持了C语言的高效性和灵活性,并引入了类、模板、继承等面向对象编程概念。C++的语法较为宽松,允许程序员有较大的设计自由度,但也因此对初学者来说有一定的学习曲线。C++程序具有良好的可移植性,编写的代码可以在不同平台和计算机上运行,只要满足特定的环境要求。虽然C++的调试可能相对复杂,但它强大的功能和高效的性能使其在软件开发领域中占据重要地位。