對比:莫比烏斯反演與歐拉函數

最近題讓我非常困惑,貌似我現在已經完全分不清楚哪些題用莫比烏斯反演,哪些用歐拉函數。

下面簡單總結一下,莫比烏斯反演處理的是

  1. 求segma(gcd(x,y)) 1<=x<=n,1<=y<=m (見《能量項鍊》)
  2. gcd(x,y) = k   1<=x<=n 1<=y<=m  求x,y對數 (見《bzoj 2301  problem b》)

莫比烏斯反演原來是解決以上問題2的,大體思路是

  設F(a,b,k)表示1<=x<=a,1<=y<=b gcd(x,y)|k 對數。

  segma(gcd(x,y))== segma(mu[k]*F(n,m,k))

  至此事件複雜度O(n)

  由於F(n,m,k)=(n/k)*(m/k),具有一定區間的一致性,於是可以優化爲O(sqrt(n))

  在此過程中,需要統計mu[]的前綴和。

而對於問題1,如果枚舉d=gcd(x,y)  O(n*sqrt(n))

  可以按上文方法,批量d相同的區間即可在將n優化爲sqrt(n)。

歐拉函數題目:

  1. segma(gcd(i,n)) (見《bzoj 2705》)
  2. gcd(x,y) = 1,1<=x,y<=n,多重詢問 (見《bzoj 2818》)

歐拉函數的轉換十分靈活,這裏就不一一敘述了。

时间: 2024-08-03 19:15:05

對比:莫比烏斯反演與歐拉函數的相关文章

非靜態初始化塊與夠着函數的 執行順序

題目: 子類A繼承父類B,A a=new A();則父類B夠着函數.父類B靜態代碼塊.父類B非靜態代碼塊執行的先後順序是? 正確的執行順序是:杜磊B靜態代碼塊->子類A靜態代碼塊->父類B非靜態代碼塊->父類B構造函數->子類A非靜態代碼塊->子類A構造函數 也就是説非靜態初始化塊的執行順序要在構造函數之前. 1 class SuperClass{ 2 private static String str="Spuer Class Static Variable&qu

bzoj2301: [HAOI2011]Problem b懵逼乌斯反演

属于结果的和好求但是结果不好求的题 (轻易能得到以k的倍数为最大公约数的对数,但是不好直接求k) 所以一波反演结束 其实反演的时候完全没有反演的感觉,就是不停地恒等变形 算是懵逼乌斯反演最简单的例题 1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,m,a,b,c,d,k,mu[50001],p[50001];bool o[50001]; 4 int calc(int n,int m) 5 { 6 int ret=0;if(n&

每周工作4小时,蒂莫西&#183;费里斯 最理想的工作方式和生活方式,QQ群666243547

内容简介  · · · · · · <每周工作4小时>是一本从观念到行为,彻底改变你的工作方式和生活方式的书.它既是数字时代的职场励志书和创业指导书,也是新新人类的全球化生存手册和人生哲学书,中文简体字版将它定位为“全球化3.0个人版”. 自2007年4月出版以来,这本书先后登上<华尔街日报>.<纽约时报>.<商业周刊>畅销书榜榜首,迄今已在全球29个国家和地区售出版权.和<世界是平的>一样,这是一本正在影响世界的书. 全书以作者本人的创业经历和

學習日記:函數和對象

2016-2-21 1. Living without an aim is like sailing without a compass. 生活沒有目標,猶如航海沒有羅盤. 2. 無論是現實世界還是計算機世界,可讀性都是相當重要的,因為這涉及到人們的意識或者是認識效率,一般文字比數字的可理解性和可讀性要好,圖片的可讀性最強. a) 一般數學是比較抽象的,因為其中充滿著各種阿拉伯數字和已經不能再簡化的希臘字符. b) 數學家的得意之作就是覺得自己是在世界科學界的最巔峰. c) 我們能用數學工具處理

BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)

2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2534  Solved: 1129 [Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sample Output 4 HINT hint 对于样例(2,2),(2,4),(3,3),(4,2)

Python 函數與常用模組 - 迭代器

迭代器 我們已經知道可以直接作用於 for 循環的數據類型有以下幾種: 一類是集合數據類型: list . tuple . dict . set . str . bytes 等. 另一類是 generator ,包括生成器和帶 yield 的 generator function. 這些可以直接作用於 for 循環的對象,統稱為可迭代的對象( Iterable ): 可迭代的對象,可以把它想成就是 可以循環的對象, 可迭代 = 可循環 可以使用 isinstance() 判斷一個對象是否為 It

bzoj2820--莫比乌斯反演

题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对. 推导: 设n<=m ans=  = 由于gcd(i,j)==1等价于 ans= = 令 T=pt 则ans= 设f(T)= 则f(T)可以用线性筛O(n)预处理出来. ans= 分块就可以了.总时间复杂度为 具体看代码. #include<iostream> #include<cstdio> #include<cstring> u

luogu2257 YY的GCD--莫比乌斯反演

link 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 多组数据T = 10000 N, M <= 10000000 推式子 \(\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=p]\) \(=\sum_p\sum_{i=1}^{n/p}\sum_{j=1}^{m/p}[\gcd(i,j)=1]\) \(=\sum_p\sum_{i=1}^{n/p}\sum_{j=1}^{m/p}\sum_{d|i,d

UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.

题意: 这道题和POJ 3090很相似,求|x|≤a,|y|≤b 中站在原点可见的整点的个数K,所有的整点个数为N(除去原点),求K/N 分析: 坐标轴上有四个可见的点,因为每个象限可见的点数都是一样的,所以我们只要求出第一象限可见的点数然后×4+4,即是K. 可见的点满足gcd(x, y) = 1,于是将问题转化为x∈[1, a], y∈[1, b],求gcd(x, y) = 1的个数. 类比HDU 1695可以用莫比乌斯反演来做,我还写了普通的和分块加速的两份代码,交上去发现运行时间相差并不