600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > PTA练习4-11 统计素数并求和

PTA练习4-11 统计素数并求和

时间:2018-11-18 02:01:31

相关推荐

PTA练习4-11 统计素数并求和

本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:

在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143

解题代码:

#include <stdio.h> #include <math.h>int main(){int m,n;scanf("%d %d",&m,&n);int i;int count=0,sum=0;for(m;m<=n;m++){int s;s=sqrt(m);for(i=2;i<=s;i++){if(m%i==0){break;}}if(i>s){if(m==1){count=count; }else{sum+=m;count++;}} }printf("%d %d",count,sum); return 0; }

解题思路:

本题视频讲解链接 /video/BV1cr4y1w79H/

更多PTA题目视频讲解请关注B站(哔哩哔哩):李桥桉

首先,先写C语言的框架:第一行头文件+第4行+第28、29行写上。

下面先屡一下做题思路,题目要求是输入两个数m,n且n>m,

我们要输出m和n之间素数的个数以及这些素数的总和。

首先我们要思考,怎么判断一个数是素数呢?

首先,1不是素数,偶数以及能开方的数都不是素数,偶数2除外。

有3个可以判断素数的办法:

①用X对2—(X-1)之间的数取余,如果满足余数为0则不是素数;

②用X对2— X/2 之间的数取余,如果满足余数为0则不是素数;

③用X对2—根号X之间的数取余,如果满足余数为0则不是素数;

本题我们采用第③种判断方法。

首先,有输入就要调用scanf()函数,%d整型输出,

m和n前面不要忘了加取址符;

随后再把m、n变量,定义到scanf()语句的前面去;

然后从第9行开始看,

for(m;m<=n;m++){

这道题我们要用两个for循环,

最外层for循环是从m到n进行n-m+1次循环,因为有n-m+1个数嘛;

内层for循环是对每个数进行遍历,遍历根号下它本身次,

且每次都要判断该数对2—根号下它本身之间的每个数进行取余,结果是否为0;

如果满足余数为0则不是素数嗷;

于是,我们增加break语句终止当次循环,继续对下个数进行同样遍历;

因为内层for循环,对每个数从2开始进行取余到根号下m结束,

注意,这里的根号下m是向下取整数,

所以,整数1~3之间的数开根号,结果s都是1,

整数4~8之间的数开根号,结果s都是2;

如果i>s了,就可以说明它是一个素数了,

当然1除外,1不是素数,但是题目要求中是可以输入1的,

所以我们在这里要加一个分支,用来判定1和其他素数;

if(m==1){

count=count;

}

如果i>s且m==1成立,那么count不变,不计数;

否则,就对素数进行累加

else{

sum+=m;

count++;

}

下面大家自己运行一下代码叭。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。