我试着做一个练习,在这个练习中你应该找到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/