黑马程序员技术交流社区

标题: 算法分析 [打印本页]

作者: 周一川    时间: 2013-3-13 08:17
标题: 算法分析
【程序4】   题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。  
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:  
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。  
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。  
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

这题做了好久,都没有头绪请哪位大侠帮个忙
作者: 黑马-郑玉元    时间: 2013-3-13 09:00
在这里我先讲下自己的思路,不知道对你是否有帮助!
根据题目意思,肯定是要有个for循环的,按照意思就是:从2开始,如果n能被2整除,打印出2,然后再n除以2得到新的值,然后用新的值继续循环。
文字描述的不怎么清楚,看代码:
int n=90;//定义一个你要分解的数
                for (int i=2;i<n;i++ )//一个for循环,如果i小于n,则结束循环
                {       
                        if(n%i==0){//判断条件,如果能被整除,则执行
                                System.out.println(i);
                                n=n/i;                //能整除之后,得到新的整数,执行第一步                       
                        }                       
                }
作者: wanggang    时间: 2013-3-13 10:40
public class Suanfa

{ //判断第一个数,得出第二个数,交给下面的方法去判断
  public void Zhishu(int s)
  {


//int[]  a =new int[20];
for(int i=2;i<=s;i++)
  {
      if(s%i==0)
     {
      s/=i;
      System.out.println(i);
     s= Panduan(s);
     }
             
}
     
      

  
   

  }
//判断第二个数,也就是将第二个数及后面的数依次分解出来
public int Panduan(int x)
{
        for(int i=2;i<=x;i++)
          {
              if(x%i==0)
             {
              x/=i;
              System.out.println(i);
             
             }
          }
        return x;
}
   public static void main(String[] args)
{
    Suanfa mt=new Suanfa();
    mt.Zhishu(90);


   
}
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2