--------------------------------天道酬勤
将一个正整数分解质因数
分析:
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);
}
}