判断一个数字是否为素数 C++实现

文章目录

  • 前言
  • 一、思路分析
  • 二、代码实现
    • 1.判断一个数是否为素数
    • 2.输出指定范围内的所有素数
  • 总结


前言

判断一个数字是否为素数是我们初学编程中常见的问题之一,利用简单的循环结构和数学知识即可轻易判断一个数字是否为素数,在此基础上,我们可以将问题扩展为找出一定范围内的所有素数,并按规律输出,思路清晰,方法简单,保证你一学就会!

一、思路分析

根据基本的数学只是我们可以知道,如果一个数 n 是合数,那么一定至少存在分别 f1 < sqrt(n) < f2,使得 f1 与 f2 的乘积为 n ,因此,我们只需用从2到 sqrt(n) 的数轮流除 n ,若皆不能整除,则 n 为素数。

思路明确,接下来将其转化为代码。

二、代码实现

1.判断一个数是否为素数

代码如下(示例):

/* Alkaid#3529 */

#include
using namespace std;

/* 判断一个数字是否为素数 */
bool determining_prime_number(int n); // 函数声明放在开头是一个良好的习惯

int main()
{
	// 读入需要判断的数字 n 
	int n = 0;
	cout << "请输入需要判断的数字 n :\n";
	cout << "n = ";
	cin >> n;

	// 调用函数判断 n 是否为素数,并输出结果
	if (determining_prime_number(n))
		cout << endl << n << " 是素数\n";
	else
		cout << endl << n << " 不是素数\n";

	return 0;
}

bool determining_prime_number(int n)
{
	// 从 2 到 sqrt(n) ,分别除 n ,若整除,则返回 0 ,为假
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
			return 0;
	}

	// 否则,返回 1 ,为真
	return 1;
}

经过测试,我们可以看到判断结果均正确:

在这里插入图片描述
在这里插入图片描述

这样,我们完成了对单个数字是否为素数的判断,那么,我们能否改进程序,从而完成对一定范围内所有数字的判断呢?

2.输出指定范围内的所有素数

我们只需添加一个循环,在循环中依次判断指定范围内的每个数字,由用户来设定循环的上下限,即可实现找出用户指定范围内的全部素数。

代码如下(示例):

/* Alkaid#3529 */

#include
using namespace std;

/* 判断一个数字是否为素数 */
bool determining_prime_number(int n);

int main()
{
	// 读入范围的上下限
	int a = 0, b = 0;
	cout << "请输入需要判断的范围 ( a-b ) :\n";
	cout << "a = ";
	cin >> a;
	cout << "\nb = ";
	cin >> b;

	cout << "\nFrom " << a << " to " << b << " 素数有:\n\n";

	int num = 0;

	// 循环判断范围内的每个数字,如果为素数,输出
	for (int i = a; i < b + 1; i++)
	{
		if (determining_prime_number(i))
		{
			// 记录素数的个数
			num++;

			// 输出素数
			cout << i << "  ";

			// 每十个数字为一行
			if (num % 10 == 0)
				cout << endl;
		}

	}

	cout << "\n\n共计 " << num << " 个\n";

	return 0;
}

bool determining_prime_number(int n)
{
	// 从 2 到 sqrt(n) ,分别除 n ,若整除,则返回 0 ,为假
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
			return 0;
	}

	// 否则,返回 1 ,为真
	return 1;
}

这样,我们便实现了对指定范围内所有数字的判断:判断一个数字是否为素数 C++实现_第1张图片


总结

判断素数是初学编程时常见的问题之一,希望本文对初学者有一定帮助,瑕疵之处也欢迎大家指正补充。后续还会稳定更新更多的学习内容,感兴趣的话不妨点个关注吧!

最后我是Alkaid#3529,期待你的关注!

你可能感兴趣的:(C++,Foundation,c++,开发语言,后端)