UVA136 Ugly Numbers【set】

問題鏈接:UVA136 Ugly Numbers

問題簡述:不能被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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章