丑数II

设计一个算法,找出只含素因子235 的第 n 大的数。

符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...

 注意事项

我们可以认为1也是一个丑数

样例

如果n = 9, 返回 10


import java.util.Scanner;

/**
 * 设计一个算法,找出只含素因子2,3,5 的第 n 大的数。
符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
 注意事项
我们可以认为1也是一个丑数
样例
如果n = 9, 返回 10
 * @author Dell
 *solution效率低,
 *solution2是更好的方法
 */
public class Test5 {
    public static void solution2(int n)
    {
    	 if(n<0) return;
    	 int[] result=new int[n];
         result[0]=1;
         int begin=1;
         int m2=0,m3=0,m5=0;
         while(begin<n)
         {
        	result[begin]=Min(result[m2]*2,result[m3]*3,result[m5]*5);
        	while(result[m2]*2<=result[begin])
        		m2++;
        	while(result[m3]*3<=result[begin])
        		m3++;
        	while(result[m5]*5<=result[begin])
        		m5++;
        	begin++;
         }
 	System.out.println(result[n-1]);
    }
    public static int Min(int a, int b,int c)
    {
    	int temp=a>b? b:a;
    	return temp>c? c:temp;
    }
	public static void main(String[] args) {
	    Scanner sc=new Scanner(System.in);
	     int n=sc.nextInt();
	     solution(n);   
	}

	public static void solution(int n) {
		int count=1;
	     int k=2;
       while(count<n)
       {
    	   int m=k;
    	 while(k!=1)
    	 {
    		 if(k%2==0)
    			 k=k/2;
    		 else if(k%3==0)
    			 k=k/3;
    		 else if(k%5==0)
    			 k=k/5;
    		 else
    			 break;
    	 }
    	 if(k==1)
    	 {
    		 count++;
    	 }
    	 k=++m;
       }
	  System.out.println(--k);
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值