求一个数阶乘的质因数的个数

来源:互联网 发布:软件测试入门基础知识 编辑:程序博客网 时间:2024/04/29 06:30
 
package namespace;import java.io.*;import java.util.*;public class Study{//筛选法求素数public static ArrayList<Integer> fun(int n){int a[]=new int[n+1];ArrayList<Integer>list=new ArrayList<Integer>();Arrays.fill(a,0);//把数组的数据初始化为0for(int i=2;i<=Math.sqrt((double)n);i++){for(int j=i+i;j<=n;j=j+i){a[j]=1;}}for(int i=2;i<=n;i++)if(a[i]==0)list.add(i);return list;}public static void main(String args[]){ArrayList<Integer>prime=fun(100);int row,number;Scanner cin=new Scanner(System.in);row=cin.nextInt();int count[]=new int[100];int max;while(row!=0){number=cin.nextInt();Arrays.fill(count,0);max=0;for(int i=2;i<=number;i++){int m=i;for(int j=0;j<prime.size();j++){while(m%prime.get(j)==0){count[j]++;m=m/prime.get(j);if(j>max)max=j;}}}for(int i=0;i<=max;i++)System.out.print(count[i]+" ");}}}/* * 总结: 些题目的意思是请你将一个数的阶乘,如5!=1*2*3*4*5 求出这些数的各个质因数的个数 * 1. 先是求出给出数以内的所有的质数,把它放在一个数组里 prime  * 2. 下面是从2循环你输入的数据,对于每一个数,你都用这个数去除prime数组里的每一个数,如果在第一个数可以除进,那么你就用一个数组记录 * 除尽这个数的总数在原来的基础上再加1,用这样来记录最后的结果 * 3. 在这同时,用一个变量来记录可以除尽的素数的最大值,不然你最后输出的时候,后面的大的素数可能都没有一次可以除尽,那么其结果将会是好多0 * 2011/10/21 15:52 *  *  *  * */