記錄下來(lái)題目及代碼算是學(xué)習(xí)的過(guò)程以后方面查閱 題目介紹:輸入正整數(shù)(2<=n<=100),把階乘n!= 1 * 2 * 3 * …* n分解成素因子相乘的形式,從小到大輸出各個(gè)素?cái)?shù)(2、3、5….)的指數(shù)。例如825 = 3 * 5^2 * 11,應(yīng)表示成(0、1、2、0、1),即分別有0、1、2、0、1個(gè)2、3、5、7、11參加相乘。你的程序應(yīng)該忽略比最大素因子更大的素?cái)?shù)(否則末尾會(huì)有無(wú)窮多個(gè)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){//反復(fù)相除,pr累加; pr[j]++; t/=p[j]; if(max<j)max=j; } } for(int i=0;i<=max;i++){ cout<<pr[i]<<" "; } } return 0;}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注