前言:
本篇博客将带大家了解如何判断素数(和n、n/2、Math.sprt(n)进行比较),以及输出1~100间的素数
目录
如何判断素数
首先,做题之前,我们得明白什么叫做素数。
所谓素数,就是它得因数除了1就是它本身。对了,1并不是素数
和n进行比较
思路:
要想判断一个数(假设为n)是不是素数,就是要求该数得因数是不是只有1和它本身。所以,最简单粗暴的方法就是通过一个循环,把从2开始到n-1之间的数(用i表示)全部遍历一遍,且遍历的同时都用n去除i,看是否满足n%i==0,但凡有一个满足,n都算不得是一个素数。
代码一:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//输入要判断的数:
System.out.println("请输入待判断的数:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//进行判断:
int i = 2;
boolean isFlg = false;
for (; i < n; i++) {
if(n%i == 0){
isFlg = true;
break;
}
}
if(!isFlg){
System.out.println(n+"是素数!");
}else{
System.out.println(n+"不是素数!");
}
}
}
代码二:
import java.util.Scanner;
public class Main {
public static void main2(String[] args) {
Scanner scanner =new Scanner(System.in);
int n= scanner.nextInt();
int i=2;
for (; i < n; i++) {
if(n%i==0){
break;
}
}
if(i==n){
System.out.println(n+"是素数");
}
}
}
结果:
和n/2进行比较
思路:
通过观察,我们能够发现,和n去比较的话,需要循环的次数太多了,于是我们发现,一个数它如果不是素数的话,它定然存在因数在(1,n/2]之间,所以在上面的基础上,只需稍加改动即可。同样的,下面的和Math.sprt(n)比较也是一样的思路。(代码中的注释千万要好好看)
import java.util.Scanner;
public class Main {
public static void main4(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i=2;
for (; i <= n/2; i++) {
//注意这里是:<=
//如果只是<的话
//4=1*4=2*2
//那么它明显不会满足此情况,同样它也无法满足下面的情况,
//然而,因为只有是素数才会打印,不打印默认不是素数,虽然凑巧感觉好像对了,本质上依旧是错的
//再者,以7为例
//7显然是一个素数
//但是7/2=3;同时上面如果是i<n/2的话
//意味着i只能加到2就得跳出循环
//跳出循环以后,下面的n%i==7%2!=0
//意味着不会输出7是素数,从输出结果看,默认7不是素数,显然错误
//综上,要加上=
if(n%i == 0){
break;
}
}
if(i > n/2){
System.out.println(n+"是素数");
}
}
}
结果:
和Math.sprt(n)进行比较
Math.sprt(n)的意思是根号n
import java.util.Scanner;
public class Main {
public static void main5(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i=2;
for (; i <= Math.sqrt(n); i++) {
if(n%i == 0){
break;
}
}
if(i > Math.sqrt(n)){
System.out.println(n+"是素数");
}
}
}
结果:
输出1~100间的素数
思路:
有了上面如何判断一个数是否是素数,输出1~100之间的素数简直就是手到擒来的事情。只需要在判断的外面套一个for循环来保证判断的数的范围是在1~100间即可。
public class Main {
public static void main6(String[] args) {
for (int i = 2; i <= 100 ; i++) {
int j = 2;
for ( ; j < i; j++) {
if(i%j == 0){
break;
}
}
if(j == i){
System.out.print(i+" ");
}
}
}
}
结果: