题目
把只包含因子2、3和5的数称作丑数(Ugly Number)。
例如6、8都是丑数,但14不是,因为它包含因子7
求按从小到大的顺序的第N个丑数。
* 思路:
* 1、数字因式分解
* a、寻找1-n的质数
* b、因式分解
* 2、判断是否是丑数
思路
1、数字因式分解
a、寻找1-n的质数
b、因式分解
2、判断是否是丑数
3、按照从小到大的第N个丑数
实验代码
package com.offer;
import java.util.ArrayList;
public class UglyNumber {
public int GetUglyNumber_Solution(int index) {
int flag_count = 1;
int i =1;
while(flag_count!=index){
if(Judge(i)){
flag_count++;
i++;
}
else{
i++;
}
}
return i;
}
public static boolean Isprime(int n){
if(n== 1)
return false;
if(n == 2)
return true;
for(int i = 2;i<n;i++){
if(n%i==0)
return false;
}
return true;
}
public static ArrayList<Integer> Getprime_array(int index){
ArrayList<Integer> prime = new ArrayList<>();
for(int i = 2;i <= index;i++){
if(Isprime(i)==true){
prime.add(i);
}
}
return prime;
}
public static ArrayList<Integer> Factor(int index){
ArrayList<Integer> factor = new ArrayList<>();
ArrayList<Integer> temp= new ArrayList<>();
if(Isprime(index)){
factor.add(1);
factor.add(index);
return factor;
}
temp = Getprime_array(index);
int i = 0;
while(index != 1){
if(index%(temp.get(i)) == 0){
index = index/(temp.get(i));
factor.add(temp.get(i));
i = 0;
}else{
i++;
}
}
return factor;
}
public static boolean Judge(int n){
ArrayList<Integer> factor = new ArrayList<>();
factor=Factor(n);
int[] a = {2,3,5};
for(int i =0;i<factor.size();i++){
if(factor.get(i)!=2&&factor.get(i)!=3&&factor.get(i)!=5){
return false;
}
}
return true;
}
public static void main(String[] agrs){
ArrayList<Integer> temp= new ArrayList<>();
UglyNumber s = new UglyNumber();
System.out.println(s.GetUglyNumber_Solution(5));
}
}