Light OJ 1035 - Intelligent Factorial Factorization

来源:互联网 发布:2016年淘宝卖什么好 编辑:程序博客网 时间:2024/05/22 06:53

思路:

这道题就是分解质因子,而且虽然是要分解N!的质因子,但是N比较小。

#include <stdio.h>#include <iostream>#include <string>#include <string.h>#include <algorithm>#include <stdlib.h>#include <math.h>#include <vector>#include <map>#include <utility>using namespace std;const int maxn = 105;int prime[maxn];int isprime[maxn];map<int, int>mp;map<int, int>::iterator it;void getprime(){//筛选出素数    memset(isprime, 0, sizeof(isprime));    int id = 1;    for(int i = 2;i < maxn;i++){        if(!isprime[i])            prime[id++] = i;        for(int j = i+i;j < maxn ;j += i){            if(!isprime[j])                isprime[j] = 1;        }    }//    for(int i = 1;i < 100;i++)//        printf("%d ",prime[i]);}void primeFactor(int n){//质因子分解    for(int i = 1;prime[i]*prime[i] <= n;i++){        int p = 0;        while(n%prime[i] == 0){            p++;            n /= prime[i];        }        if(p)            mp[prime[i]] += p;    }    if(n != 1)        mp[n]++;}int main(){    getprime();    int t,n;    scanf("%d",&t);    for(int cas = 1;cas <= t;cas++){        scanf("%d",&n);        mp.clear();        for(int i = 1;i <= n;i++)            primeFactor(i);        printf("Case %d: %d =",cas,n);        for (it = mp.begin(); it != mp.end(); it++) {            if(it != mp.begin())                printf(" *");            printf(" %d (%d)",it->first,it->second);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击