136 - Ugly Numbers

来源:互联网 发布:电脑风扇反转软件 编辑:程序博客网 时间:2024/04/30 05:24

Ugly Numbers

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence

1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, …

shows the first 11 ugly numbers. By convention, 1 is included.

Write a program to find and print the 1500’th ugly number.

Input and Output

There is no input to this program. Output should consist of a single line as shown below, with <number> replaced by the number computed.

Sample output

The 1500’th ugly number is <number>.

丑数是指不能被2,3,5以外的其他素数整除的数。把丑数从小到大排列起来,结果如下:
           1,2,3,4,5,6,8,9,10,12,15,…
求第1500个丑数。

#include <cstdio>#include <queue>using namespace std;const int maxNum = 1505;int main() {    long long a, b, c;    // 优先队列    priority_queue<long long, vector<long long>, greater<long long> > pq;    // 初始化队列有1这个元素    pq.push(1);    // 计数    long long num = 0;    for(int i = 1; i < maxNum; i++) {        long long ans = pq.top();        // test        // printf("%d \t", ans);        pq.pop();        num++;        if(num == 1500) {            printf("The 1500'th ugly number is %d.\n", ans);        }        // 如果ans是ugly number,则2ans,3ans,5ans都是丑数        a = ans * 2;        b = ans * 3;        c = ans * 5;        // a 如果与 b或c是同一数的因数关系,那么该数一定在b或c中出现过        // 因为b或c比a大        if((a % 5) && (a % 3)) {            pq.push(a);        }        // 同理        if((b % 5)) {            pq.push(b);        }        pq.push(c);    }    return 0;}
0 0
原创粉丝点击