#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; }