关闭

POJ 2247 && HDU 1058 Humble Numbers(数论)

325人阅读 评论(0) 收藏 举报
分类:

Description
定义一种集合,使得其中的元素的素数因子只能是2,3,5 ,7
即:11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, …
要求这个集合的第n个数是多少
Input
多组输入,每组用例一个整数n表示查询该集合第n个元素,以n=0结束输入
Output
对于每组用例,输出集合第n个元素
Sample Input
1
2
3
4
11
12
13
21
22
23
100
1000
5842
0
Sample Output
The 1st humble number is 1.
The 2nd humble number is 2.
The 3rd humble number is 3.
The 4th humble number is 4.
The 11th humble number is 12.
The 12th humble number is 14.
The 13th humble number is 15.
The 21st humble number is 28.
The 22nd humble number is 30.
The 23rd humble number is 32.
The 100th humble number is 450.
The 1000th humble number is 385875.
The 5842nd humble number is 2000000000.
Solution
这个集合是通过集合里的每一个数 ×2,×3,×5,×7来扩展的,要想从小到大,从ugly[1]开始扩展时,由于×2,×3,×5,×7大小不同,所以ugly[]的下一个元素是这四个数的最小值。所以到下次时,2是在乘以新的元素,而3,5,7还在乘原来的元素,但这四个数比较后最小的继续添加进集合里。由于有了这样的延迟作用,我们可以设置四个指针u2,u3,u5,u7分别指向2,3,5,7待乘的数。
要记得处理重复的数,在每扩展一个元素时,判断该数是否能通过其他数来乘得,是的话就右移p
Code

#include<stdio.h>
#define min(x,y) x<y?x:y
int main()
{
    int i,u2,u3,u5,u7,n;
    long int ugly[6000];
    ugly[1]=1;
    u2=1;
    u3=1;
    u5=1;
    u7=1;
    for(i=2;i<6000;i++)
    {
        ugly[i]=min(ugly[u3]*3,ugly[u5]*5);
        ugly[i]=min(ugly[i],ugly[u2]*2);
        ugly[i]=min(ugly[i],ugly[u7]*7);
        if(ugly[i]==ugly[u2]*2)
            u2++;
        if(ugly[i]==ugly[u3]*3)
            u3++;
        if(ugly[i]==ugly[u5]*5)
            u5++;
        if(ugly[i]==ugly[u7]*7)
            u7++;
    }
    while(scanf("%d",&n)&&n)
    {
        if(n%100>10&&n%100<20)
            printf("The %dth humble number is %d.\n",n,ugly[n]);
        else if(n%10==1)
            printf("The %dst humble number is %d.\n",n,ugly[n]);
        else if(n%10==2)
            printf("The %dnd humble number is %d.\n",n,ugly[n]);
        else if(n%10==3)
            printf("The %drd humble number is %d.\n",n,ugly[n]);
        else
            printf("The %dth humble number is %d.\n",n,ugly[n]);
    }
}
0
0
查看评论

杭电1058——Humble Numbers(丑数问题)

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058任何一个数分解到最后都是由一些质数或者1相乘。基于此,题目中将一个数的质数因子在2,3,5,7之中,所以,这个数应当从1开始,不断乘以2,3,5,7获得。最开始想到穷举法,判断一个数是否为丑数的算法...
  • qianchangdiyin
  • qianchangdiyin
  • 2016-03-03 12:56
  • 1738

HDU Humble Numbers (dp)

Humble Numbers Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 8  ...
  • zp___waj
  • zp___waj
  • 2015-06-14 22:22
  • 996

POJ 2247 Humble Numbers

题目大意: 题目链接 注释代码: 无注释代码: 单词解释:
  • u013569656
  • u013569656
  • 2014-04-27 20:42
  • 338

poj 2247 Humble Numbers

这道题和1338几乎一模一样 不同就是数据量变得更大了,而且多了一个素数 7 参与运算,这道题我用了更“高明”的数字转换技术,用了重定向,可是因为代码太长不能提交,不能用终极打表了,只能另谋他法。。。 打表程序: #include #include using namespace std...
  • Scythe666
  • Scythe666
  • 2013-10-28 16:14
  • 873

poj 2247 Humble Numbers

Humble Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9453   Accepted: 4440 ...
  • u014689045
  • u014689045
  • 2014-07-22 21:08
  • 609

POJ 2247(Humble Numbers)

题意:如果一个数他的质数因子中只含有2,3,5,7其中的一个 或多个,就称为丑数,求n以内的丑数;  思路:看了别人博客,他定义的丑数是2,3,5作为质因子,加了个7做法也一样;假设数组ugly[N]中存放不断产生的丑数,初始只有一个丑数ugly[0]=1,由此出发,下...
  • joy_go
  • joy_go
  • 2012-09-13 15:08
  • 755

HDU 1058 &amp; POJ 2247 Humble Number

Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11842 ...
  • acbron
  • acbron
  • 2013-04-10 21:02
  • 419

hdu 1058 Humble Numbers

http://acm.hdu.edu.cn/showproblem.php?pid=1058 对于这个问题呢    我一直纠结了很久  毕竟我刚刚学算法哦  很多东西都不会   我刚开始的思路是这样的  &#...
  • aibianchendewo
  • aibianchendewo
  • 2013-03-08 20:38
  • 340

Humble Numbers (HDU 1058)

Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17283...
  • jxust_tj
  • jxust_tj
  • 2014-08-15 09:46
  • 451

hdu 1058 humble numbers

恶心的输出 #include #include #include #include #include #include #include #include #include #include #define iinf 0x7f7f7f7f #define linf 1000000000000000...
  • Lawrence_Jang
  • Lawrence_Jang
  • 2012-11-06 19:27
  • 293
    个人资料
    • 访问:556897次
    • 积分:24582
    • 等级:
    • 排名:第313名
    • 原创:1943篇
    • 转载:0篇
    • 译文:0篇
    • 评论:69条
    最新评论