[bzoj4916]神犇和蒟蒻

Description

i=1nμ(i2)

i=1nφ(i2)

n<=1e9,答案对1e9+7取模

Solution

被题目名字和AC人数骗进来,一看题还吓了一跳
难道这是什么最新的操作.jpg
然后仔细看了一眼题
mdzz这不是随便做吗?
μ 的话除了i=1不是全部为0吗?!
φ 的话把式子拆出来就可以发现 φ(i2)=φ(i)i
然后就直接上杜教筛就好了。。。。
隐藏水题get
如果题目中的函数换成任意积性函数有没有什么神奇的性质呢?
这是一个值得思考的问题=w=

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int N=1e6,mo=1e9+7;
int n,n2,n6,phi[N+5],h[N+5],p[N+5];
bool bz[N+5],vis[N+5];
int sum(int x) {
    return (ll)x*(x+1)%mo*n2%mo;
}
int calc(int x) {
    if (x<=N) return phi[x];int t=n/x;
    if (vis[t]) return h[t];
    int ans=(ll)(2*x+1)%mo*(x+1)%mo*x%mo*n6%mo;
    for(int l=2,r;l<=x;l=r+1) {
        r=x/(x/l);
        (ans+=mo-(ll)(sum(r)-sum(l-1)+mo)%mo*calc(x/l)%mo)%=mo;
    }
    vis[t]=1;h[t]=ans;
    return ans;
}
int mi(int x,int y) {
    int z=1;
    for(;y;y/=2,x=(ll)x*x%mo)
        if (y&1) z=(ll)x*z%mo;
    return z;
}
int main() {
    n2=mi(2,mo-2);n6=mi(6,mo-2);
    scanf("%d",&n);phi[1]=1;
    fo(i,2,N) {
        if (!bz[i]) p[++p[0]]=i,phi[i]=(ll)(i-1)*i%mo;
        fo(j,1,p[0]) {
            int k=i*p[j];
            if (k>N) break;
            bz[k]=1;
            if (!(i%p[j])) {
                phi[k]=(ll)phi[i]*p[j]%mo*p[j]%mo;
                break;
            }
            phi[k]=(ll)phi[i]*phi[p[j]]%mo;
        }
    }
    fo(i,1,N) (phi[i]+=phi[i-1])%=mo;
    printf("1\n");
    printf("%d\n",calc(n));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值