Algorithm --> 阶乘和因子

阶乘和因子

要求:输入正整数n(1<n <101), 把阶乘n!=1x2x3x...xn分解成素因子相乘的形式,从小到大输出各个素数(2,3,5,...)的指数。

例如825=3x52x11应表示成(0,1,2,0,1),表示分别有0,1,2,0,1个2,3,5,7,11。程序应忽略比最大素因子更大的素数(否则末尾会有无穷多个0)。

样例输入:
5
53
样例输出:
5!=3 1 1
53!=49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1

算法代码:

#include <iostream>
#include <cstring>
using namespace std;

int prime[100], cnt;

bool isPrime(int n) //判断素数,n不能太大
{
    if(n < 2) return 0;
    for(int i = 2; i * i <= n; i++)
        if(n % i == 0) return 0;
    return 1;
}

int main()
{
    for(int i = 2; i <= 100; i++)
        if(isPrime(i)) prime[cnt++] = i;   //构造素数表

    int N, p[100];
    while(cin >> N)
    {
        if(N < 2 || N > 100) break;
        memset(p, 0, sizeof(p));
        int max = 0;
        for(int i = 1; i <= N; i++)
        {
            int m = i;         //需要把i复制到m中,而不要在做除法时直接修改它
            for(int j = 0; j < cnt; j++)
            {
                while(m % prime[j] == 0)  //反复除以prime[j],并累加p[j]
                {
                    m /= prime[j];
                    p[j]++;
                    if(j > max) max = j;  //更新最大素因子下标
                }
            }
        }
        for(int i = 0; i <= max; i++)  //只循环到最大下标
        {
            cout << p[i] << " ";
        }
        cout << endl;
    }
}
时间: 2024-07-31 20:29:22

Algorithm --> 阶乘和因子的相关文章

scau 8637 阶乘与因子 筛素数

时间限制:500MS  内存限制:1000K提交次数:189 通过次数:46 题型: 编程题   语言: G++;GCC Description 游戏玩了很久总会厌的,连Lyd的蚂蚁都被放生了......(参看题目:盒子上的蚂蚁) 于是Mr.Chen 看大家很无聊,就让Lord.Suno 负责新生赛出题的事情,然后大家一起帮忙出题. Lyd 想了很久,想到一个题目,题意如下: 给出两个数,正整数n(n<10)和质数m(m<100),求满足n!=k * m^p 最大的整数p(k 为正 整数).

POJ 1150-The Last Non-zero Digit(求阶乘最后一位非零数)

The Last Non-zero Digit Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1150 Appoint description:  System Crawler  (2015-03-30) Description In this problem you will be given two decimal integer

LightOj 1138 - Trailing Zeroes (III) 阶乘末尾0的个数 &amp; 二分

题目链接:http://lightoj.com/volume_showproblem.php?problem=1138 题意:给你一个数n,然后找个一个最小的数x,使得x!的末尾有n个0:如果没有输出impossible 可以用二分求结果,重点是求一个数的阶乘中末尾含有0的个数,一定和因子5和2的个数有关,因子为2的明显比5多,所以我们只需要求一个数的阶乘的因子中一共有多少个5即可; LL Find(LL x) { LL ans = 0; while(x) { ans += x/5; x /=

因子和与因子个数

1. N的因子个数 条件:给定任意一个一个正整数N 要求:求其因子的个数 首先给出结论:对于任意的整型N,分解质因数得到N= P1^x1 * P2^x2* …… * Pn^xn; 则N的因子个数M为 M=(x1+1) * (x2+1) * …… *(xn+1); 证明过程: 首先 举个例子吧 24 = 2^3 * 3^1: 其质因子有:为2和3  指数为 3和1 那么对于2 有0 1 2 3四种指数选择,对于3 有0 1两种指数选择 所以 就是4 * 2 = 8 个因子个数 如果还是不懂,那么我

同余&amp;逆元简单总结

同余&逆元 1. 同余 1. 同余的基本概念及性质 若\(x\)%\(m=a\)即m是 x-a 的一个因子, 则称x与a关于m同余,记作:\[x \equiv a(mod \;m)\] 同余基本性质: ○1. 自反性:\(a \equiv a(mod\;m)\) ○2. 对称性:\(a \equiv b(mod\;m) \rightarrow b \equiv a(mod\;m)\) ○3. 传递性:\(a \equiv b(mod\;m),b \equiv c(mod\;m) \rightar

【查找结构3】平衡二叉查找树 [AVL]

在上一个专题中,我们在谈论二叉查找树的效率的时候.不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找).如何解决这个问题呢?关键在于如何最大限度的减小树的深度.正是基于这个想法,平衡二叉树出现了. 平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis) 平衡二叉查找树,又称 AVL树. 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子

初来乍到的新人而已

我是个新人,博客新人,也是编程的新人,我比较喜欢研究一些新奇的东西,数学的东西,我数学也确实不是很怎么样,但我觉得数学是个很神奇的东西,所以科学的基础,真正的计算机研究者必须懂数学(不然就是一个只会编码的码农,很苦逼的板砖者),开这个博客的目的是想与有共同爱好的人一起交流,最近想研究一下Donald E. Knuth大师的做品具体数学>,不过估计有太多的看不懂的地方,我也想把它写出来与大家讨论交流..... 我先把它的目录写出来: 第1章 递归问题1.1 河内塔1.2 平面上的直线1.3 若瑟夫

Factorial Problem in Base K(zoj3621)

Factorial Problem in Base K Time Limit: 2 Seconds Memory Limit: 65536 KB How many zeros are there in the end of s! if both s and s! are written in base k which is not necessarily to be 10? For general base, the digit order is 0-9,A-Z,a-z(increasingly

具体数学pdf

下载地址:网盘下载 内容简介  · · · · · · 本书介绍了计算机的数学基础,内容涉及求和.取整函数.数论.二项式系数.特殊数.母函数(发生函数).离散概率.渐近等等,面向从事计算机科学.计算数学.计算技术诸方面工作的人员,以及高等院校相关专业的师生. 作者简介  · · · · · · Ronald L. Graham(葛立恒)著名数学家,美国加州大学圣迭戈分校计算机与信息科学专业教席(Jacobs Endowed Chair),AT&T实验室研究中心荣誉首席科学家,美国数学学会前任主席