描述
给你一个正整数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(1<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
#include <stdio.h> #include <math.h> #include <string.h> int arrPrime[4000],arrR[4000]; bool is_prime(int n) { for(int i=2;i*i<=n;i++) { if(n%i==0) return false; } return true; } int main() { int n; scanf("%d",&n); while(n--) { int m,k=0; scanf("%d",&m); memset(arrR,0,sizeof(arrR)); for(int i=2;i<=m;i++) { if(is_prime(i)) arrPrime[k++]=i; } for(int j=2;j<=m;j++) { int tmp=j; for(int l=0;l<k;l++) { while(tmp%arrPrime[l]==0) { tmp=tmp/arrPrime[l]; arrR[l]++; } } } for(int l=0;l<k;l++){ printf("%d ",arrR[l]); } printf("\n"); } return 0; }