因子和阶乘
问题描述:输入正整数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; } }