找出因子是2,3,5,的至少一个的第k大数

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

 

posted @ 2013-05-22 16:02  夜雨阑珊  阅读(540)  评论(0编辑  收藏  举报