以√n的复杂度求n的因子数.

板子:

/** @Cain*/
const int maxn=1e6;
int pre[maxn];
int main()
{
      int k;
      cin >> k ;
      for(int i=1;i*i<=k;i++){
        if(k%i==0){
            pre[cnt++] = i;
            pre[cnt++] = k/i;
        }
    } 
}

解释版:

#include
#include
#include
#include
using namespace std;
const int maxn=1e6;
int pre[maxn];      //存要求数的因子有哪些.
int main()
{
      int k;
      cin >> k ;
      for(int i=1;i*i<=k;i++){     //精华就在 i*i <= k 这里!
        if(k%i==0){
            pre[cnt++] = i;
            pre[cnt++] = k/i;
            //cout << i << endl << k/i << endl;
        }
    }  // pre中存的就是k的所有因子,且时间复杂度相比普通求法O(n)低很多了.
}

你可能感兴趣的:(数的因子(约数),素数相关)