zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    git更新或者还原本地代码
    log4net配置文件
    用ASP.NET MVC仿站糗事百科
    为表创建索引
    VisualStudio2008+水晶报表的使用
    C#中的位的或运算的理解
    char.IsLetter的使用
    C# 邮箱的使用
    NPOI DataTable导出excel
    NPOI DataSet导出excel
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4642657.html
Copyright © 2011-2022 走看看