蒟蒻问道:线性筛代码求约数和中,num[]表示什么
  • 板块学术版
  • 楼主Wei_wei_
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/8/16 12:16
  • 上次更新2023/11/3 03:25:07
查看原帖
蒟蒻问道:线性筛代码求约数和中,num[]表示什么
313727
Wei_wei_楼主2023/8/16 12:16
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e7+10,maxm=3000000;
int a[maxn],prime[maxm];
ll num[maxn],f[maxn];
bool is_not_prime[maxn];
int n,mod,tot;
ll ans;
void Solve(){
    scanf("%d%d",&n,&mod);
    is_not_prime[0]=is_not_prime[1]=f[1]=1;
    for(int i=2;i<=n;++i)
    {
        if(!is_not_prime[i])
        {
            prime[++tot]=i;
            f[i]=num[i]=i+1;
        }
        for(int j=1;j<=tot&&prime[j]*i<=n;++j)
        {
            is_not_prime[i*prime[j]]=1;
            if(i%prime[j]!=0)
            {
                f[i*prime[j]]=f[i]*f[prime[j]];
                num[i*prime[j]]=prime[j]+1;
            }
            else
            {
                f[i*prime[j]]=f[i]/num[i]*(num[i]*prime[j]+1);
                num[i*prime[j]]*=prime[j];
                num[i*prime[j]]++;
                break;
            }
        }
    }
}
int main(){
    Solve();
    return 0;
}

rt

2023/8/16 12:16
加载中...