σ因数和函数
含义:σ(n)表示从1到n(包含)的所有n 的因数之和。
积性:如果gcd(n, m) = 1,有σ(nm) = σ(n) * σ(m)
求值公式:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e7+7,maxm=1e7,mod=1e9+7;
typedef long long int ll;
typedef unsigned long long ull;
bool vis[maxn];
int d[maxn],pos[maxn];
vector<int>prime;
inline void init() {
for(int i=2; i<=maxm; ++i) {
pos[i]=-1;
if(!vis[i]) prime.emplace_back(i);
for(auto k:prime) {
if(i*k>maxm) break;
vis[i*k]=true;
if(i*k==0) break;
}
}
}
ll qpow(ll a,int b) {
ll res(1);
while(b) {
if(b&1) res*=a;
a*=a;
b>>=1;
}
return res;
}
inline sigma(int x) {//n的所有因子之和
int res=1;
for(auto i:prime) {
if(i>x) break;
if(!vis[x]) {
res*=1+x;
break;
}
if(x%i==0) {
int cnt(0);
while(x%i==0) {
x/=i;
cnt+=1;
}
res*=(qpow(i,cnt+1)-1)/(i-1);
}
}
return res;
} 