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

练习4-11 统计素数并求和 (20 分)

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

输入格式:

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

输出格式:

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

输入样例:

10 31

输出样例:

7 143

 代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int IsPrime(int num)
{
	int ret = 1;//默认是素数
	if (num == 1 || (num!=2&&num % 2 == 0))
	{
		ret = 0;
	}
	for (int i = 2; i <= sqrt(num); i++)
	{
		if (num%i == 0)
		{
			ret = 0;
			break;
		}
	}
	return ret;
}
int main()
{
	int m, n,num;
	int sum = 0;
	int count = 0;//记录素数的个数
	scanf("%d %d", &m, &n);
	for (int num = m; num <= n; num ++)
	{
		int ret = IsPrime(num);
		if (ret == 1)//是素数
		{
			//printf("%d ", num);
			count++;
			sum = sum + num;
		}
	}
	printf("%d %d", count, sum);

	system("pause");
	return 0;
}

分析:本题并不难,主要是两点:

(1)判断素数

(2)给定数字范围中素数的求和

关于优化,(除2以外的偶数不是素数),这里可以在主函数中跳过奇数也可以在判断素数的函数中使用if语句排除偶数

测试结果:

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页