阶乘分解质因子指数和

Posted 会飞的雅蠛蝶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阶乘分解质因子指数和相关的知识,希望对你有一定的参考价值。

The factorial function, n! = 1·2·...·n, has many interesting properties. In this problem, we want to determine the maximum number of integer terms (excluding 1) that can be used to express n!. For example: 8! = 1·2·3·4·5·6·7·8 = 2·3·2·2·5·3·2·7·2·2·2 = 27 ·32 ·5·7 By inspection, it is clear that the maximum number of terms (excluding 1) that can be multiplied together to produce 8! is 11.

Input
The input for your program consists of a series of test cases on separate lines, ended by end-of-?le. Each line contains one number, n, 2 ≤ n ≤ 1000000.

Output
For each test case, print the maximum number of factors (excluding 1) that can be multiplied together to produce n!. Put the output from each test case on a separate line, starting in the ?rst column.

Sample Input
2

1000000

1996

5

8

123456

 

Sample Output
1

3626619

5957

5

11

426566

 

 

这道题目卡数据很厉害,用了几种方法都没过。最后还是打表过。

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#define N 1000010
using namespace std;
bool vis[N];
int val[N];
int prime[N];
int ans[N];
int pn=0;
void gp()
{
    for (int i = 2; i < N; i++) {
        if (vis[i]) continue;
        prime[pn++] = i;
        val[i]=1;
        for (int j = i; j < N; j += i)
            vis[j]=1;
    }
}
int main()
{
    gp();
    for(int i=2;i<=1000000;i++)
    {
        if(val[i]){
            ans[i]=1;
            for(int j=i*2;j<=1000000;j+=i)
            {
                if(!ans[j]&&ans[j/i])
                    ans[j]=ans[j/i]+1;
            }
        }
    }
    for(int i=3;i<=1000000;i++)
    {
        ans[i]+=ans[i-1];
    }
    int m,n;
    while(~scanf("%d",&n))
    {
        cout<<ans[n]<<endl;
    }
}

  

以上是关于阶乘分解质因子指数和的主要内容,如果未能解决你的问题,请参考以下文章

阶乘质因子分解——lightoj1035

CH 3101 - 阶乘分解 - [埃筛]

阶乘分解 contest 数论基础——质数 T4

牛客挑战赛 46 B最下的指数(分解质因子,分类讨论)

牛客挑战赛 46 B最下的指数(分解质因子,分类讨论)

LightOJ 1340 - Story of Tomisu Ghost 阶乘分解素因子