1020. 分解质因数——java

 

Description

每一个大于等于2的自然数,均可写成一个或多个质数的乘积,例如:

2=2

20=2*2*5

这种将一个整数分割成若干个质数之积的操作叫做分解质因数。现在,给你一个整数N,请你编写一个程序,对其分解质因数。

Input Format

输入为一行,正整数N,保证1<N<2147483647

Output Format

输出N的质因数分解形式,格式为 N=P1(E1)P2(E2)P3(E3).... 其中,P1、P2、P3、……为组成N的各个质因子,

满足P1 < P2 < P3 < ...;E1、E2、E3、……分别为P1、P2、P3、……在N中的指数。

例如:

20=2*2*5

应该输出成:

20=2(2)5(1)

Hint

N的大于sqrt(N)的质因子至多有一个。(sqrt(n)指N的开方取整)

Sample Input

20

Sample Output

20=2(2)5(1)

这道题其实思路很简单,就是找一个数的质因数,然后保存起来,最后排序并计数、、输出

代码如下:

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6 
 7     
 8     private static Scanner in;
 9 
10     public static void main(String[] args) {
11         in = new Scanner(System.in);
12         int n =in.nextInt();
13         int a=n;
14         int t=1;
15         ArrayList <Integer>list=new ArrayList<Integer>();
16         boolean flag=false;
17         for(int i=0;i<=n;){
18             flag=false;
19             for(int j=2;j<=n;j=2*t-1){
20                 if(n%j==0){
21                     list.add(j);
22                     flag=true;
23                     n = n/j;
24                     break;
25                 }
26                 t++;
27             }
28             t=1;
29             if(!flag){
30                 break;
31             }
32             i=0;
33         }    
34         Arrays.sort(list.toArray());
35         int s=list.get(0);
36         int count =0;
37         String str="";
38         String string="";
39         for(int i=0;i<list.size();i++){
40             if(list.get(i)==s){
41                 count++;
42                 str =string+s+"("+count+")";
43             }else{
44                 string=str;
45                 count=1;
46                 s=list.get(i);
47                 str =string+s+"("+count+")";
48             }
49         }
50             System.out.println(a+"="+str);
51     }
52 }

就这样这道题解决了,但是1和0会有报错,所以可以思考一下完整的解决方案。其实很简单只需要

                        if(!flag){
				if(n==0||n==1){
					list.add(n);
				}
				break;
			}

  

posted @ 2014-06-21 18:33  BlueLuffy  阅读(432)  评论(0编辑  收藏  举报