如何判断一个数是不是素数

首先,我放假了,依着我的自律性我不见得会好好读书,但是总归还是要做点题的吧。

今天,我就做了道题,别说一道简简单单的小题,可是我却在很基础的地方翻了船。

只能说还是我菜了,写篇文章总结一下我的经验和教训。

我翻船的地方就在于“判断一个数是否为素数”这里。

这是一道基础的题目啦,我尊都很菜的,大佬们勿笑。

在开始这道题目之前,先让我们回顾一下什么是素数?

ok,素数就是除了1和他自己不能在被其他数整除的数。

以判断100以内的素数为例,相信很多小伙伴都已经有了做题思路。比如说要判断n这个数是不是质数,我们就要用n去除以从2开始到n-1为止的每一个数,如果可以被整除说明n除了1和它本身之外还有其他因数也就说明n不是素数,反之,则n就为素数。为什么是从2开始呢,又为什么是到n-1而不是n呢?因为1可以整除任何数,任何数也可以整除自身,所以不从1开始,也不用除到n而是除到n-1即可。

所以到这儿,思路应该明朗了

1、要一个for循环从1开始加到100,因为要判断100以内的质数。

2、还要一个for循环从2开始加到n-1.

3、要一个if语句判断n%i==0,如果等于0,说明不是质数。注意,要在这里加一个break跳出循环。

好,可以开始写代码了

//如何判断一个数是不是质数
#include<math.h>
#include<stdio.h>
#include<iostream>
using namespace std;


int is_primeNumber() {
	
	int i = 0;
	//假设范围为1-100内的整数
	for (int num = 1; num <= 100; num++) {
		for (int i = 2; i < num; i++) {
			if (num % i == 0) {
				cout << num << "不是素数" << endl;
				break;
			}
		}
		if (num == i) {
			cout << num << endl;
		}
	}

	return 0;
}
int main() {
	is_primeNumber();
	return 0;
}

然而运行结果,却是下面这样的。

从这个结果中,我们不难发现这个结果只是输出了非素数,但是我的素数为什么没有输出呢?

回过头去看代码,我发现了问题。

我错误的以为这里的i是指一个数本身但是实际上这个i是最开始初始化时定义的0.所以才没有输出素数,而是一直输出非素数。

那么应该如何修改呢?

其实也挺好解决,将i放在一层循环的里面二层循环地外面即可。代码如下:

//如何判断一个数是不是质数
#include<math.h>
#include<stdio.h>
#include<iostream>
using namespace std;


int is_primeNumber() {
	
	
	//假设范围为2-100内的整数
	for (int num = 1; num <= 100; num++) {
		int i;
		for (i = 2; i < num; i++) {
			if (num % i == 0) {
				cout << num << "不是素数" << endl;
				break;
			}
		}
		if (num == i) {
			cout << num << endl;
		}
	}

	return 0;
}
int main() {
	is_primeNumber();
	return 0;
}

运行后的结果如下:

这回代码终于如我所愿既输出了素数又输出了非素数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏弥-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值