整数因式分解

1问题的描述:

大于1的正整数n可以分解为:n=x1*x2*x3*…*xm.

例如,当n=12时,共有八种不同的分解式:

12=12

12=62

12=4

12=34

12=322

12=26

12=232

12=223

对于给定的正整数n,编程计算n共有多少种不同的分解式,并输出分解的结果。

 

2问题的分析:

 对n的每个因子递归搜索,当n=12时,从2到12的整数约数有2,3,4,6,12.

即 n%i=0,然后进行n/i操作,按照这样的方式依次进行,最后得到1的停止操作,计算1的个数就是不同分解式的个数。

3递归的形式:

 

4代码的编写:

#include <iostream>

using namespace std;

int m=0;//m为记录分解的种数,初始化为0

 

void solve(int n,int a[],int L)

{

    if (n==1)

    {

           m++;

    }

    else

    {

           for (int i=n;i>=2;i--)

           {

                  if (n%i==0)

                  {

                         a[L]=i;

                         solve(n/i,a,L+1);

                  }

           }

    }

}

 

int main(int argc, char** argv) {

    int n;

    cout<<"请输入一个整数:"<<endl;

    cin>>n;

    int a[500]={0};

    int L=0;

    cout<<endl;

    solve(n,a,L);

    cout<<endl<<"总共有的分类种数:"<<m<<endl;

}

  5 程序的运行

 

 

 

 

 

程序的运行结果给出了整数的因式分解的种数,但没有输出分解的形式。

 

6 代码的改进及运行的结果

#include <iostream>

using namespace std;

int m=0;//m为记录分解的种数,初始化为0

 

void prints(int a[],int n)

{

    for (int i=0;i<n;i++)

    {

           cout<<a[i];

           if (i!=n-1)

           cout<<"×";

    }

    cout<<endl;

}

 

void solve(int n,int a[],int L)

{

    if (n==1)

    {

           prints(a,L);

           m++;

    }

    else

    {

           for (int i=n;i>=2;i--)

           {

                  if (n%i==0)

                  {

                         a[L]=i;

                         solve(n/i,a,L+1);

                  }

           }

    }

}

 

int main(int argc, char** argv) {

    int n;

    cout<<"请输入一个整数:"<<endl;

    cin>>n;

    int a[500]={0};

    int L=0;

    cout<<endl;

    cout<<"因式分解的结果输出"<<endl;

    solve(n,a,L);

    cout<<endl<<"总共有的分类种数:"<<m<<endl;

}

 

程序的运行结果

 

 

 

 

 

结果分析:输入一个整数n,就可以得到因式分解的结果以及分解的种数,如上图所示,完成了实验的任务。

 

7实验总结

    先根据问题找出递推规律,结合教材上的算法和提示,编写出了因式分解的种数,主要就是输出分解的结果。于是编写两个函数,通过函数调用实现实验的目的。本次实验的时间复杂度为.当输入的数很大时(假设给出的内存空间足够),运行的时间增长的越来越大。

 

posted @ 2016-10-22 21:50  时光流逝的味道  阅读(4173)  评论(0)    收藏  举报