质数 数论

来源:互联网 发布:网络管理常用协议 编辑:程序博客网 时间:2024/06/05 20:31

题意

这里写图片描述
n<=10^12

分析

2f(n)=d|n[gcd(d,nd)=1]

dnd2f(n)d

i=1nd|i[gcd(d,id)=1]

=i=1nd|ip|dp|idμ(p)

g(n)n

=i=1np2|iμ(p)g(ip2)

=p=1nμ(p)i=1np2g(i)

=p=1nμ(p)i=1np2np2i

代码

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long LL;const int N=1000005;const int MOD=998244353;int prime[N],tot,mu[N];bool not_prime[N];void get_prime(int n){    mu[1]=1;    for (int i=2;i<=n;i++)    {        if (!not_prime[i]) prime[++tot]=i,mu[i]=-1;        for (int j=1;j<=tot&&i*prime[j]<=n;j++)        {            not_prime[i*prime[j]]=1;            if (i%prime[j]==0) break;            mu[i*prime[j]]=-mu[i];        }    }}int main(){    LL n;    scanf("%lld",&n);    int qn=sqrt(n);    get_prime(qn);    int ans=0;    for (int p=1;p<=qn;p++)    {        if (!mu[p]) continue;        LL w=n/p/p;        for (LL i=1,last;i<=w;i=last+1)        {            last=w/(w/i);            (ans+=(LL)w/i%MOD*((last-i+1)%MOD)%MOD*mu[p]%MOD)%=MOD;        }    }    printf("%d",(ans+MOD)%MOD);    return 0;}
原创粉丝点击