LOJ #6053. 简单的函数

$Min$_$25$筛模版题

为什么泥萌常数都那么小啊$ QAQ$

传送门:Here


题意:

$ f(1)=1$
$ f(p^c)=p⊕c(p 为质数,⊕ 表示异或)$
$ f(ab)=f(a)f(b)(a 与 b 互质)$

求$ sumlimits_{i=1}^n f(i)$


$ solution:$ 

显然有$ f(P_i)=P_i-1+2*[P_i=2]$

暂时忽略$ P_i=2$的情况求出质数贡献

然后再把答案$ +2$即可


$ my code: $

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define p 1000000007
#define M 200010
#define rt register int
#define ll long long
using namespace std;
inline ll read(){
    ll x = 0; char zf = 1; char ch = getchar();
    while (ch != '-' && !isdigit(ch)) ch = getchar();
    if (ch == '-') zf = -1, ch = getchar();
    while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar(); return x * zf;
}
void write(ll y){if(y<0)putchar('-'),y=-y;if(y>9)write(y/10);putchar(y%10+48);}
void writeln(const ll y){write(y);putchar('
');}
int i,j,k,m,x,y,z,cnt,sz;ll n;
int sp[M],ss[M];bool pri[M];
int id1[M],id2[M],t,h[M];ll g[M],q[M];
#define inv2 500000004
void init(){
    sz=sqrt(n);
    for(rt i=2;i<=sz;i++){
        if(!pri[i])ss[++cnt]=i,sp[cnt]=(sp[cnt-1]+i)%p;
        for(rt j=1;i*ss[j]<=sz&&j<=cnt;j++){
            pri[i*ss[j]]=1;
            if(i%ss[j]==0)break;
        }
    }
    for(ll i=1;i<=n;){
        ll v=n/i;ll R=n/v;q[++t]=v;
        if(v<=sz)id1[v]=t;else id2[R]=t;
        v%=p;h[t]=v-1;g[t]=v*(v+1)%p*inv2%p-1;
        i=R+1;
    }
}
inline int id(const ll x){return x<=sz?id1[x]:id2[n/x];}
int S(ll x,int y){
    if(x<=1||ss[y]>x)return 0;
    ll ret=g[id(x)]-sp[y-1]+y-1;
    for(rt i=y;(ll)ss[i]*ss[i]<=x&&i<=cnt;i++)
    for(ll j=ss[i],e=1;j*ss[i]<=x;j*=ss[i],e++)
    (ret+=(ll)(ss[i]^e)*S(x/j,i+1)+(ss[i]^e+1))%=p;
    
    return ret;
}
int main(){
    n=read();init();
    for(rt j=1;j<=cnt;j++)
    for(rt i=1;i<=t&&q[i]>=(ll)ss[j]*ss[j];i++){
        const int k=id(q[i]/ss[j]);
        (g[i]-=(ll)ss[j]*(g[k]-sp[j-1]))%=p;
        (h[i]-=(h[k]-j+1))%=p;
    }
    for(rt i=1;i<=t;i++)(g[i]-=h[i])%=p;
    if(n==1)cout<<1;else cout<<(S(n,1)+3+p)%p;
    return 0;
}
原文地址:https://www.cnblogs.com/DreamlessDreams/p/9998936.html