1. 程式人生 > >UVA136 Ugly Numbers【set】

UVA136 Ugly Numbers【set】

問題簡述:不能被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;
}