浙大版《C语言程序设计(第3版)》题目集 习题5-4 使用函数求素数和
  5PSMIrBt98OW 2023年11月02日 58 0

浙大版《C语言程序设计(第3版)》题目集 习题5-4 使用函数求素数和_i++

本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。

素数就是只能被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;
}

/* 你的代码将被嵌在这里 */

输入样例:

-1 10

输出样例:

Sum of ( 2 3 5 7 ) = 17

参考代码:

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;
}

这样是不是就很清晰了!

结语:

编写代码一个重要的思想就是“拆”,把一个复杂的问题拆分开来就很容易解决了,请牢记。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  EhkezVjvcUv6   2023年11月02日   55   0   0 #includei++测试数据
  Fv5flEkOgYS5   2023年11月02日   55   0   0 i++javaide
  Mqh2iumZ9USt   2023年11月02日   50   0   0 #includei++ios
5PSMIrBt98OW