JOJ1775:Factors and Factorials

来源:互联网 发布:java数组传到jsp 编辑:程序博客网 时间:2024/06/08 09:20

传送门:http://acm.jlu.edu.cn/joj/showproblem.php?pid=1775

题意:将一个数用素数个数的乘积表示出来。

比如5!= 120 = (3   1   1   0   0......)

这个是素数数组 (2   3   5   7   11.....)

思路:预处理素数,之后从小到大每个素数的枚举,能整除就不断统计。

代码:

#include <cstdio>#include <cstring>using namespace std;int main(){    bool fab[110];    int n, map[110], key;    memset(fab, 0, sizeof(fab));    for (int i = 2; i <= 10; ++i)    {        if (fab[i] == false)        for (int j = 2; i * j <= 100; ++j)            fab[i * j] = true;    }    while (scanf("%d", &n) && n)    {        memset(map, 0, sizeof(map));        for (int i = 2; i <= n; ++i)            for (int j = 2; j <= n; ++j)            {                key = i;                while (fab[j] == false && key % j == 0)                {                    key /= j;                    ++map[j];                }            }        printf("%3d! =", n);        int j = 0;        for (int i = 2; i <= n; ++i)        {            if (fab[i] == false)            {                ++j;                if (j % 16 == 0)                    printf("\n      ");                printf("%3d", map[i]);            }        }        printf("\n");    }    return 0;}