莫比乌斯反演模版
//--莫比烏斯反演函數--//
//說明:利用線性素數篩選順便求了個mu
//注釋部分為求從區間[1,b]和區間[1,d]中取兩個數,互質對數O(n^0.5)
//復雜度:O(n)
int mu[N];
//int sum[N];void mobus()
{bool mark[N];int prime[N];int pcnt=0;memset(mark,0,sizeof(mark));mu[1] = 1;for(int i=2;i<N;i++){if(mark[i] == 0){prime[pcnt++] = i;mu[i] = -1;}for(int j=0;j<pcnt && i*prime[j]<N;j++){int tmp = i*prime[j];mark[tmp] = 1;if( i%prime[j] == 0 ){mu[tmp] = 0;break;}mu[tmp] = mu[i]*-1;}}
// for(int i=1;i<N;i++)
// sum[i] += sum[i-1]+mu[i];
}//long long gaobili(int b,int d)
//{
// if(b<=0||d<=0) return 0;
// int m = min(b,d);
// long long ans = 0;
// while(m>=1)
// {
// int tb = b/( b/m +1 )+1;
// int td = d/( d/m +1 )+1;
// //前進的最大位置
// int tm = max(tb,td);
// ans += (long long)(sum[m]-sum[tm-1])*(b/m)*(d/m);
// m = tm-1;
// }
// return ans;
//}
?
代碼量超少的求一些特別情況的mobus,復雜度O( nlog(n) )
for (int i = 1; i <= n; i++)g[i] = f[i];for (int i = 1; i <= n; i++)for (int j = i + i; j <= n; j += i)g[j] -= g[i];?
總結
- 上一篇: SQL优化技巧--远程连接对象引起的CT
- 下一篇: 龙龙高铁福建段进入静态验收阶段,结束武平