在之前C语言中也做过这种题目,那么现在重温一次就当做巩固和顺便熟悉Java语法
首先我们在百度百科查找一下素数相关的定义
可以看到百度百科对于素数的介绍就是:素数又称质数,除了1和它本身,不能被其他自然数整除的数叫质数,规定了数字1不是素数也不是合数,那么我们就可以直接排除1了,for循环直接从2开始
解题思路:
本题一共有三种思路来解答:
1.如果一个数字是素数,那么就只能整除1和自己本身。
2.任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于2/n的。
3.任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于根号n的。
首先来说说第一种思路:
如果一个数字是素数,那么就只能整除1和自己本身。
第一步创建main方法
通过scanner获取用户输入的内容并把内容存到变量n中
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//获取用户输入的内容
int n = scanner.nextInt();//把用户输入的内容存到变量n中
}
然后我们使用for循环来进行两个数相除,并加上判断条件:如果n模i等于0说明n能被其他数整除,则不符合素数的条件,所以我们sout一下数字n不是素数并且加上break终止循环结束后面代码
//for循环,排除了1,直接从i=2开始,循环n次
for (i = 2;i < n;i++) {
//判断条件:如果用户输入的n模上i等于0的话说明它能被其他数整除,所以不符合素数的条件
if(n%i == 0) {
System.out.println("n不是素数:"+n);//打印结果
break;//终止循环
}
}
不是素数的判断已经有了,现在再在for循环外加上一个是素数的条件,如果上面已经判断出该数字不是素数了那么就会因为break而终止循环并结束后面的代码,但是如果上面的for没有判断出这个数不是素数,那么就可以进行我们是素数的判断了
//如果上述循环中没有符合素数条件的数就会进行判断i是否大于等于用户输入的数字n,如果条件成立
//则代表该数字为素数
if(i >= n) {
System.out.println(n + "是素数");//打印结果
}
完整代码:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//获取用户输入的内容
int n = scanner.nextInt();//把用户输入的内容存到变量n中
int i;
//for循环,排除了1,直接从i=2开始,循环n次
for (i = 2;i < n;i++) {
//判断条件:如果用户输入的n模上i等于0的话说明它能被其他数整除,所以不符合素数的条件
if(n%i == 0) {
System.out.println("n不是素数:"+n);//打印结果
break;//终止循环
}
}
//如果上述循环中没有符合素数条件的数就会进行判断i是否大于等于用户输入的数字n,如果条件成立
//则代表该数字为素数
if(i >= n) {
System.out.println(n + "是素数");//打印结果
}
}
第二种思路:
任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于2/n的。
意思就是说我们通过for循环来生成2到n/2这些数,并进行相除,跟上面的代码总体一样,只是for循环生成的数字数量不同,这个种方法更快,只需循环第一种方法的1/2次就行了
由于代码几乎没什么变化就不分布写了,直接上完整代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i;
for (i = 2;i <= n/2;i++) {
if(n%i == 0) {
System.out.println("n不是素数:"+n);
break;
}
}
if(i > n/2) {
System.out.println(n + "是素数");
}
}
第三种思路:
跟第二种思路一样,任何一个数n可以写成n=a*b这样的形式,那么必然有一个数是小于根号n的
那么我们就需要用开根号了,但是在Java中我们如何去得出根号n呢?
答案很简单,我们的Java中自带了一个方法就是Math里面的sqrt,由于Math这个方法是在java.lang这个包里面的,所以不需要我们去import,直接使用就好了
跟上述思路二一样,只是把n/2换成了根号n,即是Math.sqrt(n);
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i;
for (i = 2;i <= Math.sqrt(n);i++) {
if(n%i == 0) {
System.out.println("n不是素数:"+n);
break;
}
}
if(i > Math.sqrt(n)) {
System.out.println(n + "是素数");
}
}