丑数,紫书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;}
原创粉丝点击