本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。
素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
int PrimeSum( int m, int n );
其中函数prime
当用户传入参数p
为素数时返回1,否则返回0;函数PrimeSum
返回区间[m
, n
]内所有素数的和。题目保证用户传入的参数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;
}
/* 你的代码将被嵌在这里 */
输入样例:
输出样例:
参考代码:
int prime(int p)
{
int i;
if (p <= 1)//素数必须是正整数,1也不是素数
return 0;
else if (p == 2)//2为素数
return 1;
else
{
for (i = 2; i <= p - 1; i++)//判断p能否被2~p-1所整除
{
if (p % i == 0)//如果整说明不是素数,跳出循环,此时i<p
break;
}
if (i >= p)//i>=p说明上面循环结束还没有跳出,为素数
return 1;
else
return 0;
}
}
int PrimeSum(int m, int n)
{
int sum = 0;
for (int i = m; i <= n; i++)//依次判断m~n是否为素数
{
if (prime(i) == 1)
{
sum += i;
}
}
return sum;
}
代码详解:
首先我们应该清楚素数的定义:
素数就是只能被1和自身整除的正整数。(有特殊情况:1不是素数,2是素数)
首先应注意
1.正整数
2.只能被1和自身整
所以我们可以分情况判断一个数是否为素数:
1.是否为负数和零
2.是否为1
3.是否为2
4.是否只能被1和自身整除
前两种情况可以合并,代码写作
if (p <= 1)//素数必须是正整数,1也不是素数
return 0;
第三种情况,很容易判断
else if (p == 2)//2为素数
return 1;
第四种情况
else
{
for (i = 2; i <= p - 1; i++)//判断p能否被2~p-1所整除
{
if (p % i == 0)//如果整说明不是素数,跳出循环,此时i<p
break;
}
if (i >= p)//i>=p说明上面循环结束还没有跳出,为素数
return 1;
else
return 0;
}
这样是不是就很清晰了!
结语:
编写代码一个重要的思想就是“拆”,把一个复杂的问题拆分开来就很容易解决了,请牢记。