2014年6月7日 星期六

[UVA] 160 - Factors and Factorials

/*20140608 hanting*/
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
    int prime[10000];
    int num[50000]={0};
    int x=0;
    for(int i=2;i<50000;i++)
    {
        if(num[i]==0)
        {
            prime[x++]=i;
            for(int j=i+i;j<50000;j+=i)
            {
                num[j]=1;
            }
        }
    }
    long long N;
    while(cin>>N && N)
    {
        cout<<setw(3)<<N<<"! =";
        int arr[101]={0};/*arr[2]=3 代表 質數2是3次方*/
        while(N!=1)/*從N開始一直到1*/
        {
            int tempN=N;
            /*質因數分解*/
            for(int i=0;i<100;i++)
            {
                while(tempN%prime[i]==0)
                {
                    arr[ prime[i] ]++;
                    tempN/=prime[i];
                }
            }
            N--;
        }
        int temp;
        for(int i=99;i>=0;i--)
        {
            if(arr[i]!=0)
            {
                temp=i;
                break;
            }
        }
        int con=0;
        for(int i=2;i<=temp;i++)
        {
            if(num[i]==0)
            {
                cout<<setw(3)<<arr[i];
                con++;
                if(i==temp)
                {
                    cout<<endl;
                    break;
                }
                if(con==15)
                {
                    cout<<endl;
                    for(int i=0;i<6;i++) cout<<" ";
                    con=0;
                }

            }
        }
    }
    return 0;
}