正整数分解质因数的解法

--------------------------------天道酬勤

将一个正整数分解质因数
    分析:
    1.问题细化,可以先找到一个质数使得正整数%质数==0
    2.然后问题可以转化成分解正整数/质数
    3.直到正整数/质数为一个质数为止
    思维方式:将问题分解成一个个子问题。

代码如下:

/*
	将一个正整数分解质因数
	分析:
	1.问题细化,可以先找到一个质数使得正整数%质数==0
	2.然后问题可以转化成分解正整数/质数
	3.直到正整数/质数为一个质数为止
	思维方式:将问题分解成一个个子问题。
*/
class MyQueue
{
	final int MAX_LEN=20;
	int[] arr=new int[MAX_LEN];
	private int length=0;
	MyQueue(){}
	MyQueue(int value)
	{
		arr[length++]=value;
	}
	//入队
	public void add(int value)
	{
		if(length==MAX_LEN)
			throw new IndexOutOfBoundsException("队列已满!");
		arr[length++]=value;
	}
	//出队
	public int remove()
	{
		if(length==0)
		{
			throw new RuntimeException("队列没有元素!");
		}
		int temp=arr[0];
		for(int i=0;i<length-1;i++)
		{
			arr[i]=arr[i+1];
		}
		length--;
		return temp;
	}
	public int size()
	{
		return this.length;
	}
}
class Test12
{

	public static boolean judge(long num)
	{
		if(2==num)
			return true;
		int k=(int)Math.round(Math.ceil(Math.sqrt(num)));
		for(int i=2;i<=k;i++)
		{
			if(num%i==0)
				return false;
			if(i==k)
				return true;
		}
		return false;
	}
	public static void method(long num)
	{
		if(1==num||num<=0)
		{
			System.out.println("该数无法分解!");
			return;
		}
		if(judge(num))
		{
			System.out.println("该数本身就是质数!");
			return;
		}
		MyQueue q=new MyQueue();
		while(!judge(num))
		{
			int k=(int)Math.round(Math.ceil(Math.sqrt(num)));
			for(int i=2;i<=k;i++)
			{
				if(num%i==0&&judge(i))
				{
					q.add(i);
					num=num/i;
					break;
				}
			}
		}
		q.add((int)num);
		while(q.size()>0)
		{
			int x=q.remove();
			if(q.size()!=0)
				System.out.print(x+"*");
			else
				System.out.println(x);
		}
	}
	public static void main(String[] args)
	{
		long i=18728;
		Test12.method(i);
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章