天天看點

使用java,求100以内的質數(素數)

當時寫的太着急了,代碼我沒整理,是以顯得有點亂,大家見諒哈!

使用java,求100以内的質數(素數),做這道題目,有很多種方式!我代碼中寫了3種,大家可以任選一種!很多公司的面試的時候,筆試的時候很喜歡出這道題目。

(java的面試中很多時候都會考這道題目,不光可以考察多層嵌套循環,還可以考察break、sqrt()函數、小算法、條件判斷結構、效率性能等等知識點,而且題目還不算太大,也不算太難,是以大家最好要會寫)

package javase;

import java.util.Scanner;

/** 
 * 求100以内的質數

 */
public class PrimeNumber {

	/** 
	* 求100以内的質數

	*/
	public static void main(String[] args) {
		//求100以内的質數
		int number = 0;
		int innerNumber = 0;
		int count = 0; //100内有多少個質數
		for (number = 2; number <= 100; number++) {
//			for (innerNumber = 2; innerNumber <= number; innerNumber++) {
			for (innerNumber = 2; innerNumber <= number; innerNumber++) {
				if (number % innerNumber == 0 && number != innerNumber) {
					break;
				}
				//如下這種寫法也可以
//				if (number == innerNumber) {
//					System.out.println("質數" + number);
//				}
				
				if (number % innerNumber == 0 && number == innerNumber) {
					count++;
					System.out.println("第" + count + "個質數=" + number);
				}
			}
		}
		System.out.println("----------100以内總共有" + count + "個質數!----------");
		
//		test();
		test2();
		myFor();

	}
	
	public static void test() {
		System.out.println("-------------------");
		int count1 = 0, count2 = 0;
        for (int i = 5; i <= 20; i++) {
            // 每一個數一個個接受檢驗是否為素數
            for (int j = 2; j <= Math.sqrt(i); j++) {
                 if (i % j != 0) {
                      //不能被整除累計一次
                      count1++;
                 }
            }
            // 轉為int的類型
            int num = (int) Math.sqrt(i);
            //如果累計次數num - 1個數相等則為素數
            if (count1 == (num - 1)) {
                 System.out.println("素數:" + i);
                 count2++;
            }
            // 統計素數個數
            count1 = 0;
        }
        System.out.println(count2);
	}
	
	public static void test2() {
		Scanner in = new Scanner(System.in);
		int x;
		System.out.println(" 請輸入要求的素數範圍:");// 加入一個提示語句
		x = in.nextInt();
		System.out.println(" 2到" + x + "内的素數有:");
		int i, n;
		for (i = 2; i <= x; i++)
		{
			for (n = 2; n <= (int) Math.sqrt(i); n++)
				// 核心語句:内層變量<=(int)Math.sqrt(外層變量)
				if (i % n == 0)
					break;
			if (n > (int) Math.sqrt(i))//判斷是否為素數
				System.out.print(" " + i);// 輸出素數
		}
	}
	
	public static void myFor() {
		
		System.out.println("*************************");
		for (int i = 1; i <= 5;) {
			System.out.println("i = " + i);
			i++;
		}
		System.out.println("*************************");
		for (int i = 1; i <= 5; i++) {
			System.out.println("i = " + i);
			
		}
	}

}
           

package javase;

import java.util.Scanner;

public class PrimeNumber {

    public static void main(String[] args) {

        //求100以内的質數

        int number = 0;

        int innerNumber = 0;

        int count = 0; //100内有多少個質數

        for (number = 2; number <= 100; number++) {

//            for (innerNumber = 2; innerNumber <= number; innerNumber++) {

            for (innerNumber = 2; innerNumber <= number; innerNumber++) {

                if (number % innerNumber == 0 && number != innerNumber) {

                    break;

                }

                //如下這種寫法也可以

//                if (number == innerNumber) {

//                    System.out.println("質數" + number);

//                }

                if (number % innerNumber == 0 && number == innerNumber) {

                    count++;

                    System.out.println("第" + count + "個質數=" + number);

                }

            }

        }

        System.out.println("----------100以内總共有" + count + "個質數!----------");

//        test();

        test2();

        myFor();

    }

    public static void test() {

        System.out.println("-------------------");

        int count1 = 0, count2 = 0;

        for (int i = 5; i <= 20; i++) {

            // 每一個數一個個接受檢驗是否為素數

            for (int j = 2; j <= Math.sqrt(i); j++) {

                 if (i % j != 0) {

                      //不能被整除累計一次

                      count1++;

                 }

            }

            // 轉為int的類型

            int num = (int) Math.sqrt(i);

            //如果累計次數num - 1個數相等則為素數

            if (count1 == (num - 1)) {

                 System.out.println("素數:" + i);

                 count2++;

            }

            // 統計素數個數

            count1 = 0;

        }

        System.out.println(count2);

    }

    public static void test2() {

        Scanner in = new Scanner(System.in);

        int x;

        System.out.println(" 請輸入要求的素數範圍:");// 加入一個提示語句

        x = in.nextInt();

        System.out.println(" 2到" + x + "内的素數有:");

        int i, n;

        for (i = 2; i <= x; i++)

        {

            for (n = 2; n <= (int) Math.sqrt(i); n++)

                // 核心語句:内層變量<=(int)Math.sqrt(外層變量)

                if (i % n == 0)

                    break;

            if (n > (int) Math.sqrt(i))//判斷是否為素數

                System.out.print(" " + i);// 輸出素數

        }

    }

    public static void myFor() {

        System.out.println("*************************");

        for (int i = 1; i <= 5;) {

            System.out.println("i = " + i);

            i++;

        }

        System.out.println("*************************");

        for (int i = 1; i <= 5; i++) {

            System.out.println("i = " + i);

        }

    }

}