C语言实现素数判断及区间素数求和函数
在C语言编程练习中,常遇到需要封装素数判断逻辑并计算特定区间内所有素数之和的需求。本文将提供符合标准接口定义的prime和PrimeSum函数实现,详细讲解判断条件、边界处理及求和逻辑,附带完整的裁判测试程序以供验证。
题目要求与函数接口
本题主要考察两个函数的实现:
- int prime( int p ):当传入参数
p为素数时返回 1,否则返回 0。需注意 1 不是素数,2 是最小的素数。 - int PrimeSum( int m, int n ):计算区间
[m, n]内所有素数的总和。题目保证m ≤ n。
第1步:实现素数判断函数 prime
该函数的目的是验证单个整数是否为素数。核心思路是检查是否存在除了 1 和自身以外的因子。
int prime( int p )
{
int ret = 1; // 默认假设为素数,若发现非素数特征则改为 0
if (p > 1) // 只有大于1的整数才可能是素数
{
for (int i = 2; i < p; i++)
{
// 如果 p 能被 i 整除,说明存在其他因子
if (p % i == 0)
{
ret = 0; // 标记为非素数
break; // 无需继续检查,直接退出循环
}
}
}
else
{
// 小于等于1的整数(如0, 1, 负数)直接判定为非素数
ret = 0;
}
return ret;
}关键点:初始值设为 1,进入循环后一旦发现能整除的数即刻将返回值置为 0 并中断循环,这样能有效节省不必要的迭代时间。对于 <=1 的情况直接处理,避免后续逻辑出错。
第2步:实现区间素数求和函数 PrimeSum
该函数负责遍历指定区间,累加满足素数条件的数字。
int PrimeSum( int m, int n )
{
int sum = 0;
// 遍历从 m 到 n 的每一个整数
for (int i = m; i <= n; i++)
{
// 调用 prime 函数判断当前数字 i 是否为素数
if (prime(i))
{
sum += i; // 如果是素数,累加到总和中
}
}
return sum;
}关键点:利用之前编写的 prime(i) 作为判断依据,代码结构清晰且复用性强。循环覆盖整个闭区间 [m, n]。
完整测试程序与运行结果
以下是包含上述函数实现的完整测试代码。主函数负责读取用户输入,打印找到的素数列表,并最终输出它们的和。
#include <stdio.h>
#include <math.h>
// 函数声明
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
// 输入区间范围
scanf("%d %d", &m, &n);
printf("Sum of (");
// 遍历并打印区间内的素数
for( p = m; p <= n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
// 打印闭合括号及最终的和
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
/* 在此处嵌入 prime 和 PrimeSum 的实现代码 */输入输出示例
输入:
-1 10
输出:
Sum of ( 2 3 5 7 ) = 17
解析:在 -1 到 10 的区间内,素数仅有 2、3、5、7,它们的和为 17。注意 1 被正确排除,负数也被排除。
简要总结
通过本例可以看出,在处理数学类算法题时,先封装单一功能的函数(如素数判断),再基于此进行复杂逻辑(如求和)是一种良好的编程习惯。虽然 <math.h> 提供了更多数学工具,但基础的循环取余判断足以解决此类整数运算问题,且逻辑直观易懂。
以上就是C语言使用函数求素数和的详细内容,更多关于C语言素数计算技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









