$ auleft( n ight) = (n_1+1)(n_2+1)cdot cdot cdot (n_k+1)$
typedef unsigned long long ll; ll tau(ll n){//除数函数 ll res=1,t=2,p; while(n>t){ p=1; while(!(n%t)){ n/=t; ++p; } res*=p; ++t; } if(n!=1) res<<=1; return res; }
//javascript 移植 function tau(n){ var res=1;var t=2;var p; while(n>t){ p=1; while(!(n%t)){ n/=t; ++p; } res*=p; ++t; } if(n!=1) res<<=1; return res; }
$sigma(n)$
除数和函数
typedef unsigned long long ll; ll sigma(ll n){ ll res=1,t=2,tp; while(n>t){ tp=t; while(!(n%t)){ n/=t; tp*=t; } res*=(tp-1)/(t-1); ++t; } if(n!=1) res*=n+1; return res; }
function sigma(n){ var res=1;var t=2;var tp; while(n>t){ tp=t; while(!(n%t)){ n/=t; tp*=t; } res*=(tp-1)/(t-1); ++t; } if(n!=1) res*=n+1; return res; }
分解质因数(javascript,O(2^(n/2)),同理上面的可以这样优化)
function factor(n){ var res={};var t=2;var p; while(n>=t*t){ p=0; while(!(n%t)){ n/=t; ++p; } if(p) res[t]=p; ++t; } if(n!=1) res[n]=1; return res; }