σ因数和函数

含义:σ(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;
}
全部评论

相关推荐

09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务