LightOJ1035 Intelligent Factorial Factorization(算数基本定理)

来源:互联网 发布:邮箱数据吧 编辑:程序博客网 时间:2024/05/18 00:19

LightOJ1035
求n!的各个的算数基本定理分解
n的数据很小只有100,所以调用,并把每个位数e[i]加起来就可以了
输出写的比较丑陋…

AC代码:

#include <bits/stdc++.h>using namespace std;const int maxn=100+5;bool visit[maxn];int prime[maxn],e[maxn],n;void prime_table(){    memset(visit,true,sizeof(visit));    memset(prime,0,sizeof(prime));    int num=0;    for(int i=2;i<=maxn;++i){        if (visit[i]==true){            num++;            prime[num]=i;        }        for (int j=1;((j<=num)&&(i*prime[j]<=maxn));++j){            visit[i*prime[j]]=false;            if (i%prime[j] == 0)                break;        }    }}void getfactor(int n){    for(int i=2;i<=n;i++){        int tmp=n;        if(visit[i]==true)            while(tmp%i==0){                e[i]++;                tmp/=i;        }    }}int main(){    //freopen("input.txt","r",stdin);    prime_table();    int T,cnt=0;    scanf("%d",&T);    while(T--){        memset(e,0,sizeof(e));        scanf("%d",&n);        for(int i=2;i<=n;i++){            getfactor(i);        }        printf("Case %d: %d =",++cnt,n);        int k;        for(int i=2;i<=n;i++)            if(e[i]!=0){                printf(" %d (%d)",i,e[i]);                k=i;                break;            }        for(int i=k+1;i<=n;i++)            if(e[i]!=0){                printf(" * %d (%d)",i,e[i]);            }        cout<<endl;    }}
0 0