记录下来题目及代码算是学习的过程以后方面查阅 题目介绍:输入正整数(2<=n<=100),把阶乘n!= 1 * 2 * 3 * …* n分解成素因子相乘的形式,从小到大输出各个素数(2、3、5….)的指数。例如825 = 3 * 5^2 * 11,应表示成(0、1、2、0、1),即分别有0、1、2、0、1个2、3、5、7、11参加相乘。你的程序应该忽略比最大素因子更大的素数(否则末尾会有无穷多个0)。例如:
输入:
5 53
输出:
5!= 3 1 1
53! = 49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1
#include<iostream>#include<string.h>using namespace std;int k=1;voidcharge(int *p){ p[0]=2; for(int i=3;i<=100;i++){ int flag=0; for(int j=2;j<i;j++){ if(i%j==0){ flag++; } } if(flag==0) p[k++]=i; } for(int i=0;i<k;i++) cout<<p[i]<<" "; cout<<endl;}int main(void){ int p[100]; charge(p); int PR[100]; int n,l=0; while(cin>>n){ memset(pr,0,sizeof(pr)); int max=0; for(int i=1;i<=n;i++ ){ int t=i; for(int j=0;j<k;j++) while(t%p[j]==0){//反复相除,pr累加; pr[j]++; t/=p[j]; if(max<j)max=j; } } for(int i=0;i<=max;i++){ cout<<pr[i]<<" "; } } return 0;}新闻热点
疑难解答