求∑i
=lrμ
(i)
l,r<=10^10設m
(n)=
∑i=1
nμ(i
) 我們知道,∑d
|nμ(
d)=[
n=1]
那麼1=
∑i=1
n∑d|
iμ(d
) =∑
t=1n
∑d|t
μ(d)
=∑i=1n∑
d=1⌊
ni⌋μ
(d)
∑i=1
nm(⌊
ni⌋)
於是,m(
n)=1
−∑i=
2nm(
⌊ni⌋
) 後面的東西可以用分塊來加速。
然後打上記憶化標記。
或者可以先預處理出一段的字首和,這樣會快一點。
#include
#include
#include
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define rep(i,a) for(int i=last[a];i;i=next[i])
#define n 5000000
using
namespace
std;
typedef
long
long ll;
const
int mo=6666666;
int mu[n+5],p[n+5],cnt;
int last[mo],next[mo],v[mo];
ll t[mo],l,r;
bool bz[n+5];
void add(int x,ll y,int z)
int calc(ll x)
int main()
}mu[1]=1;fo(i,1,n) mu[i]+=mu[i-1];
scanf("%lld%lld",&l,&r);printf("%d",calc(r)-calc(l-1));
}
51NOD 1244 莫比烏斯函式之和
基準時間限制 3 秒 空間限制 131072 kb 分值 320 難度 7級演算法題 莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯 mertens 首先使用 n miu n 作為莫比烏斯函式的記號。具體定義如下 如果乙個數包含平方因子,那麼miu n 0。例如 miu 4 miu 12 ...
51nod 1244 莫比烏斯函式之和
莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯 mertens 首先使用 n miu n 作為莫比烏斯函式的記號。具體定義如下 如果乙個數包含平方因子,那麼miu n 0。例如 miu 4 miu 12 miu 18 0。如果乙個數不包含平方因子,並且有k個不同的質因子,那麼miu n 1...
51nod1244 莫比烏斯函式之和
莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯 mertens 首先使用 n miu n 作為莫比烏斯函式的記號。具體定義如下 如果乙個數包含平方因子,那麼miu n 0。例如 miu 4 miu 12 miu 18 0。如果乙個數不包含平方因子,並且有k個不同的質因子,那麼miu n 1...