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