#include <cstdlib>
#include <iostream>
using namespace std;
//找出因子是2,3,5,的至少一个的第k大数
//辗转相除法
//2013.05.22 PM
#include <stdio.h>
int isnumber(unsigned long n) //函数判断,是不是只有2、3、5作因子
{
unsigned long tempnumber;
tempnumber=n;
while(tempnumber%2==0 || tempnumber%3==0 || tempnumber%5==0) //循环判断直到不能整除2、3、5为止
{
if(tempnumber%2==0)
tempnumber=tempnumber/2; //这几个顺序不能变
if(tempnumber%3==0)
tempnumber=tempnumber/3;
if(tempnumber%5==0)
tempnumber=tempnumber/5;
}
if(tempnumber==1) //如果是1,则说明经过反复除以2、3、5以后,没有别的因子。则这个数就是我们要的数
return 1;
else
return 0;
}
int main()
{
unsigned long n=2; //定义变量n
int i=0; //定义计数量
cout<<"k值为:"<<endl;
int k;
cin>>k;
//坑爹的算法来了,穷举
while(n) //4294967296是unsigned long的上限
{
if(isnumber(n))
{
i++;
if(i==k) //找到第k个数
{
break; //后面的语句不执行了
}
n++; //若不是第k大的,虽然也是其因式的值
}
else
n++;
}
//printf("%lu\n",n);
cout<<"第"<<k<<"大的值是:"<<n<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}