查找整数的除数数

时间:2016-02-04 18:33:49

标签: c++

我需要在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;

1 个答案:

答案 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