素数:除了1和其本身,不能被任何数整除。
那么我们只需要确定一个范围。在这个范围内进行判断,看n是否能够整除这些数。
问题来了,这个范围该是多少呢?
1.判断范围是 2 ~ n-1
这是最简单的,上面定义了素数的概念,因此我们把1和本身排除就可以了,看看 2~n-1 这个范围内的数能不能被整除。
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n); //输入要判断的数
for(i = 2; i <= n-1; i++){
if(n%i==0){
printf("%d不是素数",n); //能被其他数整除,即不是
break; //记得停止,否则会一直判断,直到最后i=n,看下面的解释
}
}//i到达最大的范围时,此时i=n-1,但仍然满足 i <= n-1,因此再次进入i++的环节,此时i=n,不满足条件了,退出for循环
if(i == n){ //因此如果能到达这里,说明前面并没有能整除n的其他数,即n是素数
printf("%d是素数",n);
}
if(n == 1){ //1本身不是素数
printf("%d不是素数",n);
}
}
2.判断范围是 2 ~ n/2
同上,换for循环里面的范围就好,还有最后对i的判断处
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n); //输入要判断的数
for(i = 2; i <= n/2; i++){
if(n%i==0){
printf("%d不是素数",n);
break;
}
}
if( i>n/2 ){
printf("%d是素数",n);
}
if(n == 1){ //1本身不是素数
printf("%d不是素数",n);
}
}
if( i > n/2)这里看到有的大佬写的是 if( (i > n/2) && (n!=1) ),个人不知道要不要加后面的n!=1,因为加不加好像没什么影响,结果都一样
3.判断范围是 2 ~ 根号n
#include <stdio.h>
#include <math.h> //导入数学相关的
int main(){
int n,i;
scanf("%d",&n); //输入要判断的数
for(i = 2; i <= sqrt(n); i++){ //sqrt() 对括号内的数字进行开方
if(n%i==0){
printf("%d不是素数",n);
break;
}
}
if( i>sqrt(n) && (n!=1) ){
printf("%d是素数",n);
}
if(n == 1){ //1本身不是素数
printf("%d不是素数",n);
}
}
这个还是加了hhh,看大家怎么想的吧,加了更完整。