|
ไอที |
Java |
32075
เขียนโปรแกรมหาจำนวนเฉพาะ ตั้งแต่ 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 จนถึงตัวที่ต้องการขณะนั้น แล้วนำมาเช็คว่ามีตัวไหนบ้างที่หารลงตัว แล้วเก็บจำนวนรอบไว้ ถ้ามีรอบการวนเท่ากับตัวที่หาก็บอกได้เลยว่าเป็นจำนวนเฉพาะ แต่ถ้ารอบการหามีค่าไม่ถึงจำนวนที่ต้องการก็สรุปได้ว่าไม่เป็นจำนวนเฉพาะ