尋找醜數Java實現
阿新 • • 發佈:2019-01-22
題目:把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。
醜數即:可分解為質數的乘積,且質數只能是2,3或5。
Java實現程式碼如下:
public class CheckUglyNumber{ public static void main(String[] args){ Scanner in = new Scanner(System.in); // 輸入一個整數 int n = in.nextInt(); testUgly(n); } private static void testUgly(int n) { int count = 0; // 記錄是第幾個醜數 for(int i=1;i<100000;i++){ if(i<=6){ count++; } else if(isUglyNum(i)){ count++; } else { continue; } if(count == n){ // 尋找到第n個醜數時,輸出該醜數 System.out.println(i); break; } } } // 判斷是否為醜數 public static boolean isUglyNum(int m){ boolean b = true; for(int i=2; i<=m; i++){ if(m%i==0 && isPrimeNumber(i)){ if(i!=2 && i!=3 && i!=5){ b = false; break; } else { m = m/i; } } } return b; } //判斷一個數是否是質數(素數) public static boolean isPrimeNumber(int num){ if(num == 2) return true;//2特殊處理 if(num < 2 || num % 2 == 0) { return false;//識別小於2的數和偶數 } for(int i=3; i<=Math.sqrt(num); i+=2){ if(num % i == 0){//識別被奇數整除 return false; } } return true; } }