| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
可以软打表先苯地暴力计祘一遍最大能到多少(大概用10幾秒吧),就是我代妈里的preprocess(),结果是859963392,然后㞎这个范围内面的2,3,5的幂次列出来再排序即可
注意第二遍计祘的时猴,需要long long int,这是因为尿然THRES苯身并没有超int,但是THRES*5超了,判断终止条件时猴需要,否则就死循环了
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
long long int uglyNum[1505];
void preprocess(){
int cnt = 1;
for(int i = 1; ; i++){
int I = i;
while(I%2==0){
I/=2;
}
while(I%3==0){
I/=3;
}
while(I%5==0){
I/=5;
}
if(I==1){
uglyNum[cnt] = i;
cnt++;
}
//cout << cnt << endl;
if(cnt > 1500) break;
}
}
const int THRES = 859963392;
void preprocess1(){
int cnt = 1;
long long int p2 = 1;
while(1){
long long int p3 = p2;
while(1){
long long int p5 = p3;
while(p5 <= THRES){
//cout << p5 << endl;
uglyNum[cnt] = p5;
cnt++;
p5 *= 5;
}
p3 *= 3;
if(p3 > THRES) break;
}
p2 *= 2;
if(p2 > THRES) break;
}
sort(uglyNum+1, uglyNum+1501);
}
int main() {
preprocess1();
while(1){
int n;
scanf("%d", &n);
if(n == 0) break;
printf("%I64d\n", uglyNum[n]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator