UVA136 Ugly Numbers【set】
阿新 • • 發佈:2018-12-09
問題簡述:不能被2、3和5以外的素數整除的數稱為醜數,找出第1500個醜數。
問題分析:醜數的因子只能是2、3和5,不能引入其他素數,那麼,兩個數(都不為1)相乘所得到的數字,肯定不是素數,而且也不能整除除了這兩個數之外的素數,因為沒有因子為該素數。即1是醜數,對於x,若x是醜數則2x、3x和5x是醜數。利用已知的醜數,從小到不斷生成醜數就可以了。
用一個STL的容器set來存放醜數,集合具有去重複,自動排序的功能,先在裡面放好了1,然後乘以2,3,5得到一個數組1,2,3,5,向後移,用2乘以2,3,5得到4,6,10,重複下去直到找到第1500個。
#include <iostream> #include <set> using namespace std; set<long long> s; int main() { s.insert(1); int cnt=1; set<long long>::iterator it=s.begin(); while(cnt<1500) { long long t=*it; s.insert(2*t); s.insert(3*t); s.insert(5*t); it++; cnt++; } cout<<"The 1500'th ugly number is "<<*it<<endl; return 0; }