首先,我放假了,依着我的自律性我不见得会好好读书,但是总归还是要做点题的吧。
今天,我就做了道题,别说一道简简单单的小题,可是我却在很基础的地方翻了船。
只能说还是我菜了,写篇文章总结一下我的经验和教训。
我翻船的地方就在于“判断一个数是否为素数”这里。
这是一道基础的题目啦,我尊都很菜的,大佬们勿笑。
在开始这道题目之前,先让我们回顾一下什么是素数?
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;
}
运行后的结果如下:
这回代码终于如我所愿既输出了素数又输出了非素数。