因子和阶乘

问题描述:输入正整数n(2<=n<=100),把阶乘n!=1*2*3*4*...*n分解成素因子从小到大输出各个素数的指数。eg825 = 3*5^2*11应表示成(0,1,2,0,1)。

样例输入

  5

  53

样例输出

   5!=3 1 1 

   53!=49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1

1.java代码

 

import java.util.Scanner;

/**
 * 因子和阶乘
 * @author NEU-2015
 *
 */
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int x;
        int[] prime = new int[100];      //存放素数 2 3 5 7
        int[] p = new int[100];          //存放每个素数对应的指数
        int count;            //统计100以内有多少个素数
        int max;              //用于存储阶乘的分解的最大素数的位置
        while(input.hasNext()) {
            x = input.nextInt();
            count = 0;
            max = 0;
            for (int i = 0; i < p.length; i++) {    //p数组清零
                p[i] = 0;
            }
            for(int i = 2; i <= 100; i++) {   //将100以内的素数存在prime数租中
                if(is_Prime(i)) {
                    prime[count] = i;
                    count++;
                }
            }
            for(int i = 1; i <= x; i++) {
                int m = i;
                for(int j = 0; j < count; j++) {
                    while(m%prime[j] == 0) {
                        p[j]++;
                        m /= prime[j];
                        if(j > max) {
                            max = j;
                        }
                    }
                }
            }
            System.out.print(x + "!=");     //输出结果
            for(int i = 0; i <= max; i++) {  
                if(i == 0) {
                    System.out.print(p[i]);
                } else {
                    System.out.print(" " +p[i]);
                }
            }
            System.out.println();
        }
    }
    
    
    /**
     * 素数判断
     * @param x
     * @return
     */
    public static boolean is_Prime(int x) {
        for(int i = 2; i <= x/2; i++) {
            if(x%i == 0) {
                return false;
            }
        }
        return true;
    }
}

 

posted on 2017-09-13 17:02  NEU-2015  阅读(309)  评论(0编辑  收藏  举报

导航