找出从 2 开始到某个数值范围内的所有质数,并输出结果。 因为输出的质数可能较多,要求分行输出,每行最多输出 10 个质数。
1. 何为质数?
质数,又称素数,在大于1的自然数中,只能被1和它本身整除的数,反之,就是除了1和它本身之外,不能被其它的自然数整除。
2. 如何判断某个数n是质数?
1)在2到n的范围内,是否有一个数可以整除n,如果整除,则不是质数,不能整除,则是质数。
2)就是在2到n的循环里面的数i,判断n%i==0,取模为0则不是质数,否则是质数。
3)代码实现:
1 public class isPrime { 2 public static void main(String[] args) { 3 4 Scanner s = new Scanner(System.in); 5 int num = s.nextInt(); 6 boolean flag = true; 7 for(int i=2;i<num;i++) { 8 if(num%i == 0) { 9 flag = false; 10 break; 11 } 12 } 13 if(flag) { 14 System.out.println(num+"是质数!"); 15 } else { 16 System.out.println(num+"不是质数"); 17 } 18 19 } 20 }
4)算法优化:要判断2到n的范围内是否有一个数可以整除n,如果判断2到n的平方根的范围内不能整除,则2到n的范围内也不能整除,则代 码改为:
1 public class isPrime { 2 public static void main(String[] args) { 3 4 Scanner s = new Scanner(System.in); 5 int num = s.nextInt(); 6 boolean flag = true; 7 for(int i=2;i<Math.sqrt(num);i++) { 8 if(num%i == 0) { 9 flag = false; 10 break; 11 } 12 } 13 if(flag) { 14 System.out.println(num+"是质数!"); 15 } else { 16 System.out.println(num+"不是质数"); 17 } 18 19 } 20 }
3. 如何判断某个范围内的数是否是质数
采用循环,依次判断每个数是否是质数,则将判断某个数为质数改成方法;在main方法中只需在循环中调用判断是否是质数,是则输出
5. 代码实现:
1 package com.java.demo;
2
3 import java.util.Scanner;
4
5 /**
6 * 2. 找出从 2 开始到某个数值范围内的所有质数,并输出结果。
7 * 因为输出的质数可能较多,要求分行输出,每行最多输出 10 个质数。
8 * 质数:又称素数,只能被1和它本身整除的数
9 * 结论
10 * 1)是质数:取余所有都不得0
11 * 2)不是质数:只要有得0
12 * @author Administrator
13 *
14 */
15 public class Homework02 {
16 public static void main(String[] args) {
17 Scanner scanner = new Scanner(System.in);
18 System.out.print("请输入查找质数的范围2到");
19 int n = scanner.nextInt();
20 int count=0; //质数的个数
21 for(int i=2;i<n;i++) {
22 if(isPrime(i)) {
23 System.out.print(i+" ");
24 count++;
25 if(count%10 == 0) {
26 System.out.println();
27 }
28 }
29 }
30 System.out.println();
31 System.out.println("共有"+count+"个质数");
32
33 }
34 /**
35 * 判断某个数是否是质数
36 * @param num
37 * @return
38 */
39 public static boolean isPrime(int num) {
40 boolean flag = true; //1. 假设是质数
41 for(int i=2;i<=Math.sqrt(num);i++) {
42 if(num%i == 0) {
43 flag = false; //2. 表明不是质数
44 break;
45 }
46 }
47 return flag;
48 }
49 }