我需要在codechef中找到问题的整数除数(n)。我编写了以下程序来计算除数的数量。但该计划超出了时间限制。有没有办法优化我对这个问题的处理方法?你能建议一个更快的算法吗?
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,i=1,d=0;
while(i<=sqrt(n))
{
if(n%i==0)
{
d++;
if(i!=(n/i))
d++;
}
i++;
}
cout<<d;
答案 0 :(得分:0)
据我了解,你只需要数量的除数。找到所有素数除数并写下x1^a1 * x2^a2 ... * xn^an
。除数等于(a1+1)*(a2+1)*...*(an+1)
例如,12=2^2*3^1
因此具有(2+1)*(1+1) = 6
个除数,即1,2,3,4,6,12
。我没有测试代码,但它应该工作。
int main()
{
int n,i=2,d=0;
int num_div = 1;
while(i <= sqrt(n))
{
int cnt = 0;
while(n % i == 0){
cnt++;
n /= i;
}
if (cnt != 0)
num_div *= (cnt+1);
i++;
}
cout<<num_div;
}
选中此answer