最近看到一个题目:求第1500个只有2,3,5因子的数。数是从小到大排列,第一个数是1,1=2^0*3^0*5^0。 要求用C/C++实现。
方法1:容易理解,但是时间复杂度太大
#include <stdio.h>
#include<iostream>
#include <math.h>
bool isGet(int num){
while(num%2==0)
{
num/=2;
}
while(num%3==0)
{
num/=3;
}
while(num%5==0)
{
num/=5;
}
if(num==1)
{
returntrue;
}
else
{
returnfalse;
}
}
int main()
{
intcount=1;//计数器
intnum=1;//
while(count<=1500)
{
if(isGet(num))
{
count++;
}
num++;
}
num--;
printf("num=%d",num);
}
方法2 : 时间复杂度较小
#include <stdio.h>
#include<iostream>
#include <math.h>
long min(long num1,long num2,long num3){
longtemp=num1;
if(num2<temp)
{
temp=num2;
}
if(num3<temp)
{
temp=num3;
}
returntemp;
}
int main()
{
inti2_mul=1;
inti3_mul=1;
inti5_mul=1;
longugly[1501];
ugly[1]=1;
for(int i=2;i<=1500;i++)
{
ugly[i]=min(ugly[i2_mul]*2,ugly[i3_mul]*3,ugly[i5_mul]*5);
if(ugly[i]==ugly[i2_mul]*2)
{
i2_mul++;
}
if(ugly[i]==ugly[i3_mul]*3)
{
i3_mul++;
}
if(ugly[i]==ugly[i5_mul]*5)
{
i5_mul++;
}
}
printf("结果是:%d",ugly[1500]);
}