正整數分解質因數的解法

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

將一個正整數分解質因數
    分析:
    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);
	}

}

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