丑数,紫书P120UVa136
来源:互联网 发布:大道寺知世家多有钱 编辑:程序博客网 时间:2024/05/22 13:34
数论的题目实际上实在探究某种数学规律,只要数学规律找到了,编写程序并不困难。
丑数题目中的定义是不能被2,3,5以外的素数整除的数。探寻规律可知,世界上除了1的所有正整数都是由若干个素数因子组成的,因为素数是最基本的“不可再分”的数。那么本题题目翻译过来丑数就是用2,3,5三个数拼凑组成的数。由此可推断,若x是丑数,则2x,3x,5x都是丑数,则编程思路油然而生。
语法难点:
1.priority_queue
// UVa136 Ugly Numbers// Rujia Liu#include<iostream>#include<vector>#include<queue>#include<set>using namespace std;typedef long long LL;const int coeff[3] = {2, 3, 5};int main() { priority_queue<LL, vector<LL>, greater<LL> > pq; set<LL> s; pq.push(1); s.insert(1); for(int i = 1; ; i++) { LL x = pq.top(); pq.pop(); if(i == 1500) { cout << "The 1500'th ugly number is " << x << ".\n"; break; } for(int j = 0; j < 3; j++) { LL x2 = x * coeff[j]; if(!s.count(x2)) { s.insert(x2); pq.push(x2); } } } return 0;}