虽然都写了,过也过了,还是觉得杜教筛的复杂度好玄学 设f*g=h,∑f=S, 则∑h=∑f(i)S(n/i下取整) 把i=1时单独拿出来,得到 S(n)=(∑h-∑2->n f(i)S(n/i下取整) 右边的部分可以分块解决 递归一下,≤一个阈值的暴力表出来 注意阈值以上的也要记忆化 复杂度不会算,但从本题来看过1e10没问题 #include <bits/stdc++.h> #define MAX 5000000 using namespace std; long long a,b,N…
1244 莫比乌斯函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k.例如:miu(2), mi…
题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 杜教筛裸题,不过现在我也只会筛这俩前缀和... $$s(n)=\sum _{i=1}^{n}f(i)$$ 那么就有: $$\sum_{i=1}^{n}f(i)\lfloor \frac{n}{i} \…
题目链接 map: //杜教筛 #include<map> #include<cstdio> typedef long long LL; const int N=5e6; int mu[N+3],P[N+3],cnt; bool Not_P[N+3]; std::map<LL,LL> sum; //std::map<LL,LL>::iterator it; void Init() { mu[1]=1; for(int i=2;i<N;++i) { if…
1239 欧拉函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质. S(n) = Phi(1) + Phi(2) + -- Phi(n),给出n,求S(n),例如:n = 5,S(n) = 1 +…
[题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varphi *I)(i)=\sum_{i=1}^{n}\sum_{d|i}\varphi(d)=\sum_{i=1}^{n}\sum_{d=1}^{\frac{n}{i}}\varphi(d)$ 根据$id=\varphi*I$,$\sum_{i=1}^{n}(\varphi*I)(i)=\frac{i(i+1)…
和上一题差不多,一个是μ*I=e,一个是φ*I=Id 稍改就得到了这题的代码 (我会告诉你我一开始逆元算错了吗) #include <bits/stdc++.h> #define MAX 5000000 #define MOD 1000000007 using namespace std; long long a,b,N; ],p[MAX],ans[MAX]; ]; long long work(long long n) { if(n<=MAX) return phi[n]; if(an…
我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的想学会莫比乌斯反演和杜教筛,请拿出纸笔,每个式子都自己好好的推一遍,理解清楚每一步是怎么来的,并且自己好好思考. Part1莫比乌斯反演 莫比乌斯反演啥都没有,就只有两个式子(一般只用一个) 原来我已经写过一次了,再在这里写一次 就只写常用的那个吧 基本的公式 对于一个函数\(f(x)\) 设\(g(x)=\…
[BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首先就把区间缩小一下 这样变成了\(gcd=1\) 设\(f(i)\)表示\(gcd\)恰好为\(i\)的方案数 那么,要求的是\(f(1)\) 设\(g(x)=\sum_{d|x}f(d)\) 所以\(g(x)\)表示\(x|gcd\)的方案数 这个不是很好求吗? 所以一波莫比乌斯反演 \[f(1)…
[BZOJ4652]循环之美(莫比乌斯反演,杜教筛) 题解 到底在求什么呢... 首先不管他\(K\)进制的问题啦,真是烦死啦 所以,相当于有一个分数\(\frac{i}{j}\) 因为值要不相等 所以有\(i \perp j\),也就是\(gcd(i,j)=1\) 现在考虑\(K\)进制 先从熟悉的\(10\)进制入手 如果一个最简分数是纯循环小数 我们知道,他的分母里面不含\(2,5\) 而且,巧极了\(10=2*5\) 于是乎,\(YY\)一下 如果\(K\)进制中一个分数是纯循环小数 那…