一、题目大意

本题要求写出前1500个仅能被2,3,5整除的数。

二、题解

最初的想法是从1开始检验该数是否只能被2,3,5整除,方法是这样的,对于一个数,如果它能被2整除,就除以2,如果它能被3整除,就除以3,如果它能被5整除,就除以5,直到不能被2,3,5整除,看结果是不是1,如果是1就满足条件,否则不满足条件。但是第1500个数大约近10亿,显然是1s内不可以完成的。
然后仔细分析发现:满足条件的数是2^x*3^y*5^z,可以转换为这样的定义,定义一个集合,该集合中有元素1,如果x在集合中,那么2x,3x,5x也在集合中,其它数不再集合中。我们可以定义一个bool数组,初始化为false,从1开始设置为true,如果x为true,则2x,3x,5x设置为true,直到获得1500个true即可,典型的空间换时间的做法,但是这个空间也太大了!这个数组要开到近10亿才可以,显然是不可行的,内存用完了,可能都不够用。
顺着这个思路继续想下去,定义一个集合,该集合中有元素1,如果x在集合中,那么2x,3x,5x也在集合中,其它数不再集合中。按照这个思路走下去:只需要定义一个结果数组,和3个指针,分别代表待乘2的数,待乘3的数,待乘5的数,

1
*2
*3
*5
选出乘积最小的,加入到结果集中,相应指针右移
1     2
*3   *2
*5
选出乘积最小的,加入到结果集中,相应指针右移
1    2     3
*5   *2
     *3
选出乘积最小的,加入到结果集中,相应指针右移
1    2     3     4
*5   *3     *2
选出乘积最小的,加入到结果集中,相应指针右移
1     2      3     4
   *3     *2
      *5
以此类推,直到获得1500的结果集。

参考:

三、java代码

import java.util.Scanner;

public class Main { 

    public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n;
int i2_mul;
int i3_mul;
int i5_mul;
long[] ugly=new long[1501]; i2_mul = 1;
i3_mul = 1;
i5_mul = 1;
ugly[1]=1; for( int i = 2; i <= 1500; i++ ){
ugly[i] = Math.min(ugly[i2_mul]*2,Math.min(ugly[i3_mul]*3,ugly[i5_mul]*5));
if(ugly[i] == ugly[i2_mul]*2 )
i2_mul++;
if(ugly[i] == ugly[i3_mul]*3 )
i3_mul++;
if(ugly[i] == ugly[i5_mul]*5)
i5_mul++;
} while((n=sc.nextInt())!=0){
System.out.println(ugly[n]);
}
}
}

Poj 1338 Ugly Numbers(数学推导)的更多相关文章

  1. poj 1338 Ugly Numbers(丑数模拟)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1338&q ...

  2. poj 1338 Ugly Numbers

    原题链接:http://poj.org/problem?id=1338 优先队列的应用,如下: #include<cstdio> #include<cstdlib> #incl ...

  3. 51nod 1010 只包含因子2 3 5的数 && poj - 1338 Ugly Numbers(打表)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 http://poj.org/problem?id=1338 首先 ...

  4. POJ 3252 Round Numbers 数学题解

    Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...

  5. poj 3252 Round Numbers 【推导·排列组合】

    以sample为例子 [2,12]区间的RoundNumbers(简称RN)个数:Rn[2,12]=Rn[0,12]-Rn[0,1] 即:Rn[start,finish]=Rn[0,finish]-R ...

  6. Poj 2247 Humble Numbers(求只能被2,3,5, 7 整除的数)

    一.题目大意 本题要求写出前5482个仅能被2,3,5, 7 整除的数. 二.题解 这道题从本质上和Poj 1338 Ugly Numbers(数学推导)是一样的原理,只需要在原来的基础上加上7的运算 ...

  7. Ugly Numbers(STL应用)

    题目链接:http://poj.org/problem?id=1338 Ugly Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  8. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  9. 递推(三):POJ中的三道递推例题POJ 1664、POJ 2247和POJ 1338

    [例9]放苹果(POJ 1664) Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. In ...

随机推荐

  1. why factory pattern and when to use factory pattern

    1 factory pattern本质上就是对对象创建进行抽象 抽象的好处是显然的,可以方便用户去获取对象. 2 使用factory pattern的时机 第一,当一个对象的创建依赖于其它很多对象的时 ...

  2. GPL 与 LGPL 扫盲

    本文部分摘自评论:从射手QQ之争看开源许可证的选择 首先,开源并不代表放弃自身的权力,相反,开源软件之所以存在,正是它非常注重这种权力,并且把这种权力赋予了软件的所有使用者.小心的选择许可证是开发开 ...

  3. 自定义弹窗 VS AlertDialog分享弹窗

    一.摘要 弹窗通常用于提示用户进行某种操作,比如:点击分享按钮,弹窗分享对话框:双击返回按钮,弹窗退出对话框:下载文件,提示下载对话框等等,分享对话框/退出对话框/下载对话框,都可以直接使用Alert ...

  4. 去掉标题栏/ActionBar后点击menu键时应用崩溃

    MainActivity 继承了 ActionBarActivity后,想要去掉标题栏(ActionBar),在程序中加上requestWindowFeature(Window.FEATURE_NO_ ...

  5. Spark0.9.0机器学习包MLlib-Classification代码阅读

    本章主要讲述MLlib包里面的分类算法实现,目前实现的有LogisticRegression.SVM.NaiveBayes ,前两种算法针对各自的目标优化函数跟正则项,调用了Optimization模 ...

  6. 解压tar包中的指定文件

    解压<a 'tar');"="" href="http://asmboy001.blog.51cto.com/'#\'"" targe ...

  7. Django——自定义分页(可调用)

    1.view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models ...

  8. MYSQL:基础——触发器

    MYSQL基础——触发器 引入触发器 什么是触发器 如果你想要某条语句(或某些语句)在事件发生时自动执行.比如: 每当订购一个产品时,都从库存数量中减去订购的数量:无论何时删除一行,都在某个存档表中保 ...

  9. Gem简介

    Rubyems:简称gems是一个用于对rails组建近些年个打包的ruby打包系统,它提供了一个分发ruby程序喝库的标准格式,还提供了一个管理程序包的工具.Rubyems的功能类似于linux下的 ...

  10. Python decorator @property

    @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性 下面的链接很好的阐述了@property的概念和应用 http: ...