例題 5-7 醜數
阿新 • • 發佈:2018-11-01
醜數:指包含因子2,3,5的正整數被稱作醜數,比如4,10,12都是醜數,而7,23,111則不是醜數,另外1也是醜數。
最小的醜數是1,而對於任意醜數x,2x,3x和5x 也都是醜數。
題:醜數從小到大排列,求第1500個醜數(859963392)
#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; }
列印醜數:
#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<150;i++){ LL x=pq.top(); cout<<x<<endl; pq.pop(); for(int j=0;j<3;j++){ LL x2=x*coeff[j]; if(!s.count(x2)){ s.insert(x2); pq.push(x2); } } } return 0; }