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);//把数组的数据初始化为0
for(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
*
*
*
* */
求一个数阶乘的质因数的个数
最新推荐文章于 2023-09-23 21:32:33 发布