1. 程式人生 > >練習4-11 統計素數並求和

練習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語句排除偶數

測試結果: