题目:
1026: 丑数

Time Limit: 1000 MS Memory Limit: 65536 KB

Total Submit: 257 Accepted: 112 Page View: 1467

Submit Status Discuss

Description

丑数就是这个数的质因子只有2,3,5,7这四个,除此之外不再含有其它

别的质因子。

注意1也被认为是丑数.丑数的前20个为

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... ;

Input

每行输入一个N,1 <= N <= 5842,N为0时输入结束.

Output

输出相应的第N个丑数.

Sample Input

Raw

1

2

3

4

11

12

13

21

22

23

100

1000

5842

0

Sample Output

Raw

1

2

3

4

12

14

15

28

30

32

450

385875

2000000000

Source

SWUST




解题心得:
1、一开始想的是用一个数多次除尽2、3、5、7,最后能够得到1则是丑数,后来想了想,只要用1不停的乘上2、3、5、7就可以得到丑数,但是题目是对于第几个丑数的提问,所以我们需要对于得到的丑数进行一个排序,去重。但是由于数据量比较大,这样明显是不行的。所以需要在去重、排序的部分进行优化。
2、怎么优化呢,这里有一个很神奇的操作,就是把已经排好序的一个丑数列(这里直接用的1),(用1)乘上2、3、5、7,找出乘积中最小的,排在数列的最后面,然后再将之前选中的最小的那个数在数列中的位置向后移动一位,因为我们每次都是将最小的那个数放进数列之中,所以乘上2、3、5、7的部分和数列的最后一个相比只会等于或者大于它,等于的直接在位置中向后移动一位,大于的找出最小的放入,最后得到的就是一个有序的数列。


#include<bits/stdc++.h>
using namespace std; long long Min(long long p1,long long p2,long long p3,long long p4)
{
long long temp1,temp2;
temp1 = min(p1,p2);
temp2 = min(p3,p4);
return min(temp1,temp2);
}
int main()
{
int num[6000];
num[1]= 1;
long long p1=1,p2=1,p3=1,p4=1;
int cnt = 1;
while(cnt<=5842)
{ //这里是核心算法,注意不能将if写成else if的形式,因为可能出现和最后一位重合的部分需要直接向后移动一位,也就是去重
long long v = Min(num[p1]*2,num[p2]*3,num[p3]*5,num[p4]*7);
if(v == num[p1]*2)
p1++;
if(v == num[p2]*3)
p2++;
if(v == num[p3]*5)
p3++;
if(v == num[p4]*7)
p4++;
num[++cnt] = v;
}
long long N;
while(scanf("%lld",&N) && N)
printf("%d\n",num[N]);
}

数学算法:poweroj1026-丑数(根据固定倍数得到从小到大的序列)的更多相关文章

  1. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  2. Luogu2723丑数Humble Numbers【归并排序】

    Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...

  3. C语言程序设计100例之(14):丑数

    例14   丑数 问题描述 丑数是其质因子只可能是2,3或5的数.前10个丑数分别为1, 2, 3, 4, 5, 6, 8, 9, 10, 12.输入一个正整数n,求第n个丑数. 输入格式 每行为一个 ...

  4. 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]

    P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...

  5. 九度OJ 1214 寻找丑数【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...

  6. 笔试算法题(20):寻找丑数 & 打印1到N位的所有的数

    出题:将只包含2,3,5的因子的数称为丑数(Ugly Number),要求找到前面1500个丑数: 分析: 解法1:依次判断从1开始的每一个整数,2,3,5是因子则整数必须可以被他们其中的一个整除,如 ...

  7. 丑数<数学技巧>

    题意:丑数就是质因子只有2,3,5 ,7,的数,另外1也是丑数.求第n(1=<n<=5842)个丑数,n=0,结束. 思路:.3.5或者7的结果(1除外).那么,现在最主要的问题是如何排序 ...

  8. java算法之超级丑数

    问题描述: 写一个程序来找第 n 个超级丑数. 超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内. 比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [ ...

  9. 算法习题---5.7丑数(Uva136)

    一:题目 丑数是指不能被除了2,,5以外的素数整除的数.将丑数从小到大排序 ,,,,,,,,,,,.... 求第1500个丑数 (一)求解方法 对于任意丑数x,他的2x,3x,5x都是丑数. 二:代码 ...

随机推荐

  1. 最简实例演示asp.net5中用户认证和授权(2)

    上接最简实例演示asp.net5中用户认证和授权(1) 基础类建立好后,下一步就要创建对基础类进行操作的类了,也就是实现基础类的增删改查(听起来不太高大上),当然,为了使用asp.net5的认证机制, ...

  2. ASP.NET 中Textbox只能输入数字,不能输入其他字符

    解决办法如下:  <asp:TextBox ID="txtpage" runat="server" Width="61px"     ...

  3. Java的compare比较

    package com.jckb; public class Name implements Comparable<Name>{ private String firstName; pri ...

  4. 读取java配置文件properties

    java项目里很多参数都是写在配置文件properties上,如果需要读取的话,可以使用jdk里提供的Properties类进行处理. 具体写法如下: public class PropertiesC ...

  5. String与Date转换

    public class TimeTraining { public static void changeStr(String str){ str = "137878"; } pu ...

  6. 微信小程序时间处理问题

    环境: 开发环境: 1. Mac OS 10.12.5 2. 微信Web开发者工具 v0.18.182200 测试环境: 1. iPhone 7 2. iOS 10.3.2 3. 微信 6.5.9 问 ...

  7. jQuery懒加载插件

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  8. Vue日历

    Vue生成日历,根据返回值将日期标红 HTML: <h1>CSS 日历</h1> <div id="calendar"> <div cla ...

  9. tas5717/5719功放问题点总结

    问题一 AMP output channel invert problem and modification 原因:如果硬件设计时,耳机或者喇叭的输出通道反了,就要对其进行左右对换. 对策:如果通道反 ...

  10. Garmin APP开发之入门

    Garmin开发-入门 先附上几个已经开发完成的app日历 up down 翻月 start 回到当前月(就差农历了) 秒表和定时器一体app界面比较简单,但是实用,长按菜单键可以切换秒表和定时器,有 ...