n的阶乘分解成素数幂的积
题目描述:
题目分析:对于某个阶乘,每个乘积因子总能被一些有小到大的素数除至1,,总体上表现为某个阶乘总能由一些由小到大的素数的幂的积表示。这样我们的目的就到到了
代码展示:
1 //阶乘素数分解 2 #include<stdio.h> 3 #include<string.h> 4 int prime[100],p[100]; 5 6 int is_prime(int x) 7 { 8 int sign=1; 9 for(int i=2;i*i<x;i++) 10 { 11 if(x%i==0) 12 { 13 sign=0; 14 break; 15 } 16 } 17 if(sign) return 1; 18 else return 0; 19 } 20 21 int main() 22 { 23 int count=0,n; 24 for(int i=2;i<=100;i++) 25 { 26 if(is_prime(i)) prime[count++]=i; 27 } 28 while(scanf("%d",&n)==1) 29 { 30 int max=0; 31 memset(p,0,sizeof(p)); //这一步必不可少,不然会出错 32 printf("%d!=(",n); 33 for(int i=1;i<=n;i++) //对于阶乘里出现的每个数,都能被某些从小到的的素数整除,变成1后不再管 34 { 35 for(int j=0;j<count;j++) 36 { 37 int m=i; 38 while(m%prime[j]==0) 39 { 40 p[j]++; 41 m=m/prime[j]; 42 if(j>max) max=j; 43 } 44 } 45 } 46 for(i=0;i<max;i++) printf(" %d",p[i]); 47 printf(")\n"); 48 } 49 return 0; 50 }
运行结果(这里多了括弧):