51 Nod 1244 莫比乌斯函数前n项和
Posted stranger-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51 Nod 1244 莫比乌斯函数前n项和相关的知识,希望对你有一定的参考价值。
积性函数前n项和必看好文
https://blog.csdn.net/skywalkert/article/details/50500009
递归计算的时候要用map记忆化一下,前面的打表会比较快一点。
AC代码
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; typedef long long ll; map<ll,ll> ma; int check[maxn],prime[maxn],mu[maxn]; void Mobius(int N)//莫比乌斯函数线性筛 { int pos=0;mu[1]=1; for (int i = 2 ; i <= N ; i++) { if (!check[i]) prime[pos++] = i,mu[i]=-1; for (int j = 0 ; j < pos && i*prime[j] <= N ; j++) { check[i*prime[j]] = 1; if (i % prime[j] == 0) { mu[i*prime[j]]=0; break; } mu[i*prime[j]]=-mu[i]; } } for(int i=2;i<=N;i++) mu[i]+=mu[i-1]; } ll solve(ll a) { if(a<=1e6) //记忆化 return mu[a]; if(ma.count(a)) return ma[a]; ll temp=1; for(ll i=2;i<=a;) { ll t=a/i; ll k=a/t; temp-=(k-i+1)*solve(t);//分段或者叫分块加速一下 i=k+1; } return ma[a]=temp; } int main() { Mobius(1e6); ll a,b; cin>>a>>b; cout<<solve(b)-solve(a-1)<<endl; }
以上是关于51 Nod 1244 莫比乌斯函数前n项和的主要内容,如果未能解决你的问题,请参考以下文章