2013年10月17日 星期四

[UVA] 160 - Factors and Factorials

 Factors and Factorials 

The factorial of a number N (written N!) is defined as the product of all the integers from 1 to N. It is often defined recursively as follows:

displaymath27


displaymath28

Factorials grow very rapidly--5! = 120, 10! = 3,628,800. One way of specifying such large numbers is by specifying the number of times each prime number occurs in it, thus 825 could be specified as (0 1 2 0 1) meaning no twos, 1 three, 2 fives, no sevens and 1 eleven.

Write a program that will read in a number N ( tex2html_wrap_inline39 ) and write out its factorial in terms of the numbers of the primes it contains.

Input

Input will consist of a series of lines, each line containing a single integer N. The file will be terminated by a line consisting of a single 0.

Output

Output will consist of a series of blocks of lines, one block for each line of the input. Each block will start with the number N, right justified in a field of width 3, and the characters `!', space, and `='. This will be followed by a list of the number of times each prime number occurs in N!.
These should be right justified in fields of width 3 and each line (except the last of a block, which may be shorter) should contain fifteen numbers. Any lines after the first should be indented. Follow the layout of the example shown below exactly.

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<string.h>
int s[105]={0};
int main(){
    int n,i,a,j,add;
    while(scanf("%d",&n)!=EOF && n){
        memset(s,0,sizeof(s));
        for(i=2;i<=n;i++){
            a=i;
            for(j=2;a>1 && j<=n;j++){
                while(a%j==0){
                    s[j]++;
                    a/=j;
                }
            }
        }
        printf("%3d! =",n);
        add=0;
        for(i=1;i<=n;i++){
            if(s[i]){
                add++;
                if(add>1 && add%15==1) puts(""),printf("      ");
                printf("%3d",s[i]);
            }
        }
        puts("");
    }
}

沒有留言:

張貼留言