丑数是指那些因子只含2,3,5的数,为方便起见,1也视为丑数,故1,2,3,4,5,6,8,9,10,12,15是最前面的丑数,输出第N(N<=300)个丑数。
/*判断是否是2,3,5的指数*/
int IsPower(int value,int cnt)
{
while(value % cnt ==0)
{
value=value/cnt;
if (value == 1)
{
return 1;
}
}
return 0;
}
/*判断是否是丑数*/
int IsUglyNumber(int value)
{
if (value >=1 && value <= 5)
{
return 1;
}
else
{
/*如果是2,3,5的指数倍,则判断为丑数*/
if(IsPower(value,2) == 1 || IsPower(value,3) == 1 || IsPower(value,5) ==1)
return 1;
/*其他非2,3,5指数倍的,满足能整除2*3=6,2*5=10,3*5=15的都可以判断为丑数*/
if(value % 6 ==0 || value % 10 == 0 || value % 15 ==0)
return 1;
else
return 0;
}
}
int FindUglyNumber(int N)
{
int i;
int count;
if (N<=0 || N>300)
return -1;
count=0;
for(i=1;i<10000;i++)
{
if(IsUglyNumber(i) == 1)
{
count+=1;
if(count == N)
{
return i;
}
}
}
return 0;
}