关闭

白皮书&&因子和阶乘

526人阅读 评论(0) 收藏 举报

因子和阶乘

时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
给你一个正整数n,把n!=1x2x3x.....xn分解成素因子相乘的形式,并从小到大输出每个素因子的指数,但要保证最后输出的素因子个数不为0。例如825应表示为0,1,2,0,1表示分别有0,1,2,0,1个2,3,5,7,11。
输入
第一行有一个整数n(0<n<10000),表示有n组测试数据;
接下来n行每行有一个整数 m(0<m<10000)
输出
从小到大输出m分解成素因子相乘后各个素因子对应的指数
样例输入
2
5
53
样例输出
3 1 1
49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 
AC代码:
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
bool a[10005]={1,1,0,0};
int prim[1500];
int p[1500];
int count;
void is_prim()
{
	for(int i=2;i*i<=10005;++i)
		if(!a[i])
		for(int j=2*i;j<=10005;j+=i)
			a[j]=1;
	   count=0;
	  for(int i=2;i<=10005;++i)
		  if(!a[i])  prim[count++]=i;
}
int main()
{
	int T;
	scanf("%d",&T);
	is_prim();
	while(T--)
	{
		int n;
		scanf("%d",&n);
		memset(p,0,sizeof(p));
		int maxn=0;
		for(int i=2;i<=n;++i)
		{
			int m=i;
			for(int j=0;j<count&&m!=1;++j)
			while(m%prim[j]==0)
				{  p[j]++;
				   m/=prim[j];
				   maxn=max(maxn,j);
				 }
		}
		for(int i=0;i<=maxn;++i)
			printf("%d ",p[i]);
		    printf("\n");
		}return 0;
}


0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:377933次
    • 积分:7899
    • 等级:
    • 排名:第2728名
    • 原创:426篇
    • 转载:6篇
    • 译文:1篇
    • 评论:18条
    最新评论