我试着做一个练习,在这个练习中你应该找到n个数的阶乘的除数:
https://www.e-olymp.com/en/problems/124
这是我的代码:

int fact(int n){
    return (n==1 || n==0) ? 1 : n*fact(n-1);
}
long long int a,b=1,c=0;
    cin>>a;
    long long int y=fact(a);
    while(b!=y){
        if(y%b==0){
                c++;
        }
        b++;
    }
        cout<<c+1<<endl;

但这段代码花费了太多时间,我需要更快的速度不要给出代码,算法就足够了。

最佳答案

在这个任务中。显然,1 <= N <= 45太大,无法直接计算。
你应该实施另一种方法从N迭代到1并对每个N进行素因式分解。然后您可以很容易地找到i, 1 < i <= N的素因式分解,只需合并每个N!的因式分解之后,使用先前计算的因子分解计算除数的总数。
例如6!以下内容:

2 = 2
3 = 3
4 = 2 ^ 2
5 = 5
6 = 3 * 2

所以:
6! = 2 ^ 4 * 3 ^ 2 * 5

以及除数:
(4 + 1) * (2 + 1) * (1 + 1) = 30

关于c++ - 用C++查找数字除数的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40073671/

10-12 22:29