เขียนโปรแกรมหาจำนวนเฉพาะ ตั้งแต่ 1-N ว่ามีกี่ตัว

| ไอที | Java | 17849

เขียนโปรแกรมหาจำนวนเฉพาะ ตั้งแต่ 1-N ว่ามีกี่ตัว

วันนี้เรามาเขียนโปรแกรม เพื่อหาจำนวนเฉพาะกันครับ ซึ่งโจทย์ก็คือ ให้หาว่าจำนวนเต็มตั้งแต่ 1 ถึง N มีจำนวนเฉพาะกี่ตัว และมีอะไรบ้าง

ตัวอย่างโค้ดที่ได้เขียนขึ้น
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PrimeNumber {
    public static void main(String[] args) {
        int maxnum;
        while(true){
            try{
                System.out.print("Insert Prime Number : ");
                Scanner in = new Scanner(System.in); // สร้างตัวแปร Scanner
                maxnum = in.nextInt(); //รับค่า N เข้ามาทางแป้นพิมพ์
                if(maxnum > 1) { // ตรวจสอบว่ามากกว่า 1 หรือเปล่า
                    break;
                }
            }
            catch(Exception e){}
        }
        List ListPrime = new ArrayList<>(); //สร้าง List เพื่อเก็บจำนวนเฉพาะ
        ListPrime.add(2); //เพิ่มเลข 2 เข้าไปเพราะเป็นจำนวนเฉพาะตัวแรก
        int state = 0;
        for (int i = 2; i < maxnum; i++) { //วนลูปตั้งแต่ 2-N เพื่อหาจำนวนเฉพาะ
            if(i%2 == 0) {
                continue;
            }
            for (int j = 2; j < i; j++) { //วนลูปเพื่อหาว่าหารลงตัวหรือป่าว
                state = j;
                if(i%j == 0) { //ถ้าหารลงตัวให้หยุดลูป
                    break;
                }
            }
            if(state == i-1) { //เช็คค่าที่ได้จากลูปว่าลนทุกตัวหรือป่าว ถ้าวนทุกตัวก็เป็นจำนวนเฉพาะ ถ้าวนไม่ครบก็ไม่เป็น
                ListPrime.add(i);
            }
        }
        System.out.println(ListPrime.toString());
        System.out.println(ListPrime.size() + " ตัว");
    }
}
จากตัวอย่างโค้ด เราได้สร้าง Scanner เพื่อรับค่าจากคีย์บอร์ด จากนั้นก็สร้าง List เพื่อสำหรับเก็บจำนวนเฉพาะ โดยการแอดเลข 2 เข้าไปก่อน เพราะเลข 2 เป็นจำนวนเฉพาะจำนวนแรก จากนั้นเราก็วนลูปหาจำนวนเฉพาะ ตั้งแต่เลข 2 ถึงเลขที่เรากรอกขึ้น โดยในการหาแต่ละตัวนั้น เราก็จะวนหาตั้งแต่ 2 จนถึงตัวที่ต้องการขณะนั้น แล้วนำมาเช็คว่ามีตัวไหนบ้างที่หารลงตัว แล้วเก็บจำนวนรอบไว้ ถ้ามีรอบการวนเท่ากับตัวที่หาก็บอกได้เลยว่าเป็นจำนวนเฉพาะ แต่ถ้ารอบการหามีค่าไม่ถึงจำนวนที่ต้องการก็สรุปได้ว่าไม่เป็นจำนวนเฉพาะ
comments