练习C语言的第二天及第二题,我们来谈一谈对素数的判断。
提到素数,想必大家都不陌生。
素数,就是质数,大于1的一个正整数,指的是它不能被除了1与它本身以外的其它自然数整除,给几个最简单的例子,2就是素数、3也是素数、5也是素数。
很明显可以看到,这些数都不能被除了1与它本身以外的其它自然数整除。
那判断能否整除的条件,自然就是取余数。
比方以3为例,在1和它本身之间的数为2,而3除以2取余为1,不为零,则说明它为素数。
反之,以6为例,6除以2取余为0,则说明它不为素数。
那么,在知道如何判断素数的逻辑之后,我们就可以动手来写代码了。
在程序中,我们一般用mod来代表取余数,也就是用%这个符号来代表。
首先,我们要输入一个正整数N,也就是用到scanf。
之后对该正整数N进行判断。
注意,这里其实做的时候蛮有问题的,因为要判断是否为素数,就要让它对从1到它本身(开区间)进行整除,只要有一个能整除,那就说明不是素数,反之,则为素数。
需要用到一个for循环来进行遍历,再在for循环里进行条件判断。
如图所示:
在最开始做的时候,诶,我按照自己的逻辑慢慢写的,可还是产生了问题,为什么会这样呢,原因归根结底在于for循环里写printf打印语句,执行了很多次,导致最终输出的结果多种多样。
所以,为了避免这个问题,避免重复打印的问题,必须得把打印的语句给挪到for循环外面。
那挪到外面之后呢,我们就要对for循环中进行处理,可以用一个计数来代替,比方说当判断不为素数的时候,计数加一,反之,则计数不变化。
之后再在for循环之外对这个计数进行判断不就行了么。
代码如下所示:
#include<stdio.h>
int main(){
int N = 0;
int count = 0;
scanf("%d", &N);
while(N<=1){
printf("please input again\n");
scanf("%d", &N);
}
for(int i = 2; i < N; i ){
if(N%i == 0){
count ;
}
}
if(count==0){
printf("it is a prime\n");
}
else{
printf("it is not a prime\n");
}
}
结果:
总结:总的来说,判断是否为素数还是蛮简单的,当然了,判断是否为素数其实不一定就是用这种方法,也可以用其它方法,欢迎大家一起讨论。