相當簡單的一題
邊聊天邊寫,一個小時不到就搞定了
兩個需要注意的地方

1. Output 的 "=" 後面是沒有空格的,直接開始3碼一組靠右對齊的數字
2. 每輸出 15 個質數後要換行,不然一樣會判 WA

Run Time 是 0.000    不過好像大家都一樣

題目                                                                                                                   

階乘的數學表示式是 N!, 代表從 1 乘到 N 的結果, 如下:

1! = 1
N! = N * (N-1)!

階乘的成長速度相當驚人, 5! = 120, 10! = 3,628,800, 而表示階乘的其中一種方法是去紀錄每一個質因數出現的頻率。例如 825 這個值, 可以用數字序列 (0 1 2 0 1), 來表示 0 個 2, 1 個 3, 2 個 5, 0 個 7, 1 個 11。
所以數字序列中的每個元素是代表連續出現的質因數, 而上面的數值, 代表該質因數出現的頻率。

寫一個程式讀入一個數字 N (2<=N<=100), 算出階乘結果,以之前的方式來表示這個階乘。

Input

輸入有許多筆測試資料, 一筆一列, 每一列包含一個數字 N, 當 N=0 代表輸入結束, 這一列不該被處理。

Output

每一筆測試資料, 需要輸出一組區塊結果, 這組區塊, 先輸出 N! = , 接下來以上述的方式, 依序輸出該質因數在這個階乘中出現的頻率次數為何(長度3,靠右對齊), 請注意, 每一列最多只能印出 15 個質因數, 多餘的得換一列再印出。

詳細 輸出格式請參考 Sample Output。

Sample Input

5
53
0

Sample Output

 5! = 3 1 1
53! = 49 23 12 8 4 4 3 2 2 1 1 1 1 1 1
          1

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int P_Number[25] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
 int P_Count[25]; 
 int T_Value,i,j,Tmp_Value;
 while(scanf("%d",&T_Value) == 1)
 {
 if(T_Value == 0) break;
 
 Tmp_Value = T_Value;
 
 printf("%3d! = ",T_Value);
 
 for(i=0;i<25;i++)
 {
 P_Count[i] = 0;
 }
 
 for(i=Tmp_Value;i>1;i--)
 {
 j=0;
 Tmp_Value = i;
 
 while(P_Number[j] <= Tmp_Value)
 {
 while(Tmp_Value % P_Number[j] == 0)
 {
 
 Tmp_Value /= P_Number[j];
 P_Count[j]++; 
 }
 j++;
 } 
 }
 
 i=0;
 
 while(P_Number[i] <= T_Value)
 {
 printf("%3d",P_Count[i]);
 i++;
 }
 printf("\n");
 } 
 return 0;
}

文章標籤
全站熱搜
創作者介紹
創作者 HydraSmith 的頭像
HydraSmith

Hydra Smith

HydraSmith 發表在 痞客邦 留言(0) 人氣(52)