1. 程式人生 > >線性篩尤拉函式與莫比烏斯函式 (模板)

線性篩尤拉函式與莫比烏斯函式 (模板)

#include<bits/stdc++.h>

using namespace std;
const int MAXN = 1e5+1;

int prime[MAXN];  //素數
int phi[MAXN];  //尤拉函式
int miu[MAXN];  //莫比烏斯函式
int cnt;
bool vis[MAXN]; 

int main(){
    miu[1]=1;phi[1]=1;
    for(register int i=2;i<=MAXN;i++){
        if(!vis[i]) {miu[i]=-1;prime[++cnt]=i;phi[i]=i-1
;vis[i]=1;} for(register int j=1;j<=cnt && prime[j]*i<=MAXN;j++){ vis[i*prime[j]]=1; if(i%prime[j]==0){ miu[i*prime[j]]=0; phi[i*prime[j]]=phi[i]*prime[j]; break; } else { phi[i*prime[j]]=phi[i]*(prime[j]-1
); miu[i*prime[j]]=-miu[i]; } } } for(register int i=1;i<=MAXN;i++){ cout<<i<<" "<<"phi"<<":"<<phi[i]<<"miu"<<":"<<miu[i]<<endl; } return 0; }

相關推薦

線性函式函式 模板

#include<bits/stdc++.h> using namespace std; const int MAXN = 1e5+1; int prime[MAXN]; //素數 i

函式函式的求法

#include<iostream> #include<cstdio> #include<cmath> using namespace std; typedef

由 [SDOI2012]Longge的問題 探討函式函式的一些性質和關聯

本題題解 題目傳送門:https://www.luogu.org/problem/P2303 給定一個整數\(n\),求 \[ \sum_{i=1}^n \gcd(n,i) \] 蒟蒻隨便yy了一下搞出來個\(O(\sqrt{n})\)的演算法 這題資料怎麼這麼水 首先看到gcd我們就下意識的對它反演一波

和式的下標轉換函式

和式的下標轉換 == 式子裡面有個數論符號 x|d 表示d是x的倍數, 專業術語叫x整除d ,比如x=2,n=7就是f(2)+f(4)+f(6) 變化一下,列舉x的倍數i,因為d=x*i的.變成右邊式子   再來一個多重和式,這裡對於i*j而言,i,j列舉範圍互不影

入門照搬

神犇部落格:https://www.cnblogs.com/linyujun/p/5210772.html 搬這部落格是為了自己以後好好系統總結複習。 d|n,表示n能夠整除d,也就是d是n的所有因子   μ(x)是莫比烏斯函式,它是這樣計算的 μ(1) = 1&

變換FMT/子集和變換--luogu3175 [HAOI2015]按位或

傳送門 今天講子集和變換,其實感覺和高維字首和差不多 就著這道題學習了一下 F M T

HDU 1695 GCD 反演模板

GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17212    Accepted

杜教整除分塊,積性函式,狄利克雷卷積

參考資料 整除分塊: 當我們求∑ni=1f([ni])∑i=1nf([ni])的時候,如果1到n求一遍感覺太傻了,因為會有很多重複的計算,例如:n=10000時,i在[101,111]時,都有[ni]=9[ni]=9,所以我們只需要對所有數分成如上的一個

線性函式函式

在這裡提供三種線性篩的講解,它們分別是:素數篩,尤拉篩和莫比烏斯篩。 ·篩法正確性的重要理論依據: 上述函式均為積性函式。積性函式的性質為:若f(x)是一個積性函式,那麼對於任意素數a,b,滿足f(ab)=f(a)*f(b) ·一些可愛的要點(有助於理解篩法原理

線性&函式&函式

一: 莫比烏斯反演: vijos1889 描述 小島: 什麼叫做因數分解呢? doc : 就是將給定的正整數n, 分解為若干個素數連乘的形式. 小島: 那比如說 n=12 呢? doc : 那麼就是 12 = 2 X 2 X 3 呀.

數論線性總結 (素數函式函式,前n個數的約數個數)

線性篩 線性篩在數論中起著至關重要的作用,可以大大降低求解一些問題的時間複雜度,使用線性篩有個前提(除了素數篩)所求函式必須是數論上定義的積性函式,即對於正整數n的一個算術函式 f(n),若f(1)=1,且當a,b互質時f(ab)=f(a)f(b),在數論上就稱它為積性

線性素數+函式+函式

先上程式碼: const int N=1000000; int phi[N],prime[N],mu[N]; bool vis[N]; void init(){ phi[1]=1; int p=0; for (ll i=2 ; i<

關於歐函數函數等一系列積性函數的線性

出發點 get 我們 什麽 提升 討論 一點 每一個 ++i 為什麽要學習不同的篩法? 原因很簡單,因為通常當我們需要運用歐拉函數等一系列函數的時候,我們會采取提前預處理的方法來提高我們的效率。既然要提升效率,那麽我們就需要盡量用優秀一下的方法來完成我們的要求。 線性篩的出

函式函式的單個值的快速求法

直接根據定義求即可,複雜度為(n)−−−√(n) 題目:莫比與尤拉 AC程式 #include<cstdio> #define ll int using namespace std

線性反演

然而 效率 復雜度 是把 套路 組合數 處理 for 答案 線性篩與莫比烏斯反演 和上篇文章一樣,一直沒有研究這個東西,結果又考了GG……TAT 下定決心學一學,搞好這個東西。 線性篩 篩質數有很多方法,好像很厲害的有洲閣篩、杜教篩(然而我都不會QAQ),比較坑的有暴

線性函式C++版

#include <bits/stdc++.h> using namespace std; const int N=1e7+50; //同時篩出素數和莫比烏斯函式 int p[N],miu[N]; bool check[N]; int pre[N]; void init(){

GuGuFishtionhdu 6390 函式+函式

題目: 題意: 設 ,已知m,n,p,求   。 思路: 尤拉函式性質: (p為質數)。 一個數肯定能表示成若干個質數的乘積,因此,設。   (其餘的項上下展開後都可以約掉,因為它們互質) 設 。 設 設

【BZOJ2440】【中山市選2011】完全平方數 二分+容斥+函式線性

連結: #include <stdio.h> int main() { puts("轉載請註明出處[vmurder]謝謝"); puts("網址:blog.csdn.n

線性函式

莫比烏斯全家桶 ll prime[maxn],mob[maxn],vis[maxn],cnt; void Mobius(){ memset(prime,0,sizeof(prime));

hdu3501 函式或容斥原理函式

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=3501 題解1:顯然,本體可以用容斥原理,求出每個數的倍數情況,其係數就是莫比烏斯函式。 題解2:對於整