正文

求一个数的质因数分解式2007-08-22 23:14:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/clever101/28763.html

分享到:

           

            朱金灿

 

        

    一个数的质因数分解式就是把一个数分为一个个质数因子,比如60,它的质因数分解式就是2 2 3 5 ,首先这几个数都是质数,其次它们相乘为60。看《算法设计与分析基础》,见到书上提到数的质因数分解式,便编了一个小程序实现求一个数的质因数分解式。算法思路是这样的:

1.       首先判断该数是否为质数,如果不是就进行分解,如果是就输出;

2.       分解步骤是这样的:使用循环从被分解数的平方根中开始相除,一旦相除余数为0,就分别对余数和商进行类似分解,退出循环。

 

很显然,这个算法要使用递归。

 

代码如下:

 

#include <iostream>

using namespace std;

#include <math.h>

#include <conio.h>

 

// 判断一个数是否是素数

bool IsPrimeNum(int number)

{

    bool bIsPrimeNum = true;

       for (int i = int(sqrt((double)number));i>1;i--)

       {

        if((number%i)==0)

               bIsPrimeNum = false;

       }

       return bIsPrimeNum;

}

 

// 分解

void DivideNum(int number)

{

    if(!IsPrimeNum(number))

       {

               for (int i = int(sqrt(number));i>1;i--)

               {

                      if((number%i)==0)

                      {          

                DivideNum(i); // 对除数进行分解

                         number = number/i;

                DivideNum(number); // 对商进行分解

                   break;

                      }

                    

               }

       }

  else

        cout<<number<<"   ";

}

 

 

int main(int argc, char* argv[])

{

       int number;

    cout<<"please input a number: "<<endl;

    cin>>number;

       DivideNum(number);

      cout<<endl;

       getch();

       return 0;

}

 

运行效果如下图:


阅读(9529) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册