2016-12-7 關於尤拉函式
關於什麼是尤拉函式,以及一些非常簡單的尤拉函式,在此就不多加贅述。
尤拉函式的基本性質:
1.尤拉函式是積性函式,但不是完全積性函式,即φ(mn)=φ(n)*φ(m)只在(n,m)=1時成立.
2.對於一個正整數N的素數冪分解N=P1^q1*P2^q2*...*Pn^qn.
則: φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn).
3.除了N=2,φ(N)都是偶數.
4.設N為正整數,∑φ(d)=N (d|N).
另外:尤拉函式的程式設計應用公式:
1.P為素數,φ(P)=P-1.
2.若i mod prime[j]=0,那麼φ(i*prime[j])=φ(i)*prime[j]
3.若i mod prime[j]≠0,那麼φ(i*prime[j])=φ(i)*(prime[j]-1)
在打尤拉函式表的時候,可以用到新學的篩選法求素數的附加條件:
#include<bits/stdc++.h>
using namespace std;
bool a[100000];
int phi[100000];
int prime[100000];
int n;
void phi1(){
int size=0;
for(int i=2;i<n;i++){
if(a[i]){
phi[i]=i-1;
prime[size++]=i;
}
int j=0;
while(j<=size&&j*i<n){
a[i*prime[j]]=0;
if(i%prime[j]==0) {
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
j++;
}
}
for(int i=0;i<size;i++) cout<<phi[i]<<" ";
cout<<endl;
}
int main()
{
memset(a,1,sizeof(a));
cin>>n;
phi1();
return 0;
}
這樣,線性篩尤拉函式的時間複雜度就會僅僅為O(n),並且沒有重複篩選的phi。
相關推薦
2016-12-7 關於尤拉函式
關於什麼是尤拉函式,以及一些非常簡單的尤拉函式,在此就不多加贅述。 尤拉函式的基本性質: 1.尤拉函式是積性函式,但不是完全積性函式,即φ(mn)=φ(n)*φ(m)只在(n,m)=1時成立. 2.對於一個正整數N的素數冪分解N=P1^q1*P2^q2*...*Pn^
2018.12.17【BZOJ4802】尤拉函式(Pollard-Rho)
傳送門 解析: 對於 n = ∏
2016多校訓練一 PowMod,hdu5728(尤拉函式+指數迴圈節)
Declare:k=∑mi=1φ(i∗n)mod1000000007n is a square-free number.φ is the Euler's totient function. find:ans=kkkk...kmodp There are infini
數學 尤拉函式相關
尤拉函式相關 1,\(phi(i)\)表示在1到i的數中與i互質的數的個數。 2,\(O(\sqrt{n})\)求\(phi\) 算數基本定理: \[ phi(i)=i*(p_1-1)/p_1*(p_2-1)/p_2*……*(p_k-1)/p_k \] 列舉質因數套公式即可: code:
一類尤拉函式相關的求和式推導
\(\\\) 寫在前面 因為最近做了不少和尤拉函式相關的求和問題,而這一類求和的推導有沒有涉及到反演和卷積,所以單獨寫一寫。 給出的題目順序與難度大致無關,是按照個人做題的順序安排的。 再次宣告尤拉函式的定義:\(\varphi(x)\) 表示 \([1,x]\) 裡的所有整數中,與 \(x\)
POJ3090 Visible Lattice Points (數論:尤拉函式模板)
題目連結:傳送門 思路: 所有gcd(x, y) = 1的數對都滿足題意,然後還有(1, 0) 和 (0, 1)。 #include <iostream> #include <cstring> using namespace std; const in
[BZOJ4026]dC Loves Number Theory 尤拉函式+線段樹
連結 題意:給定長度為 \(n\) 的序列 A,每次求區間 \([l,r]\) 的乘積的尤拉函式 題解 考慮離線怎麼搞,將詢問按右端點排序,然後按順序掃這個序列 對於每個 \(A_i\) ,列舉它的質因數,由於不同的質因數只算一次,所以我們只關心每個質數它最後一次出現的位置,開一棵線段樹維護
hdu5528(積性函式+尤拉函式)
題意:設(題目已把f(6)的表給出),,給定n(n<=1e9),求g(n) 最主要的是求f(m),考慮到模數大於0的情況比較多,所以考慮考慮求ij mod n==0的情況。。 然後其實從題目給的表中看出對一個a來說,他0的個數和gcd(a,n)有關,其實也很容易證明,對一個數a來說
尤拉函式 線段樹 狀壓 奇數國
讓我們一起來%forever_shi神犇 題意:求區間積的 ϕ \phi ϕ值。 題解:
UVA11426 GCD - Extreme (II) (尤拉函式/莫比烏斯反演)
UVA11426 GCD - Extreme (II) 題目描述 PDF 輸入輸出格式 輸入格式: 輸出格式: 輸入輸出樣例 輸入樣例#1: 10 100 200000 0 輸出樣例#1: 67 13015 143295493160 Solution 這道題我用莫比烏斯反演和尤拉函式都寫了一遍,發現
【hdu 5728 PowMod】【數論】【尤拉函式】【尤拉降冪遞迴取模】【尤拉積性函式】
【連結】 http://acm.hdu.edu.cn/showproblem.php?pid=5728 【題意】 n是無平方因子的數 定義k=∑mi=1φ(i∗n) mod 1000000007,求K^k^k^k......%p 【思路】 先尤拉性質求出k
尤拉篩尤拉函式
尤拉函式 phi[i]表示 1~i 內與 i 互質的個數 通式:phi[i]=x∏(1-pi) pi表示 i 的質因數 是積性函式 phi[i]*phi[j]=phi[i*j] 做法:一般用尤拉篩 先貼一份程式碼: 1 #include<cstdio>
2015 ICPC瀋陽現場賽 F. Frogs (尤拉函式)
題目連結 m個石頭圍成一圈,一群青蛙從0開始跳,第i個青蛙每步跳ai距離,求所有能被跳到的石頭的編號之和。 容易推出石頭x被第i只青蛙跳到的充要條件是,顯然這與下面的命題是等價的: 石頭x被跳到的充要條件是存在一個i,使得。 gcd(x, m)顯然是m的因數,那麼我們就可以列舉m的因
[SDOI2008]沙拉公主的困惑 線性篩_尤拉函式_逆元_快速冪
Code: #include<cstdio> using namespace std; typedef long long ll; const int maxn=10000000+1; long long mod; ll fac[maxn]; ll inv[maxn];
[SDOI2008]儀仗隊 尤拉函式
顯然,橫縱座標要互質才能被看到。 處理出與橫座標 i i i 互質的縱座標的個數,求一遍字首和即可。 Co
GCD - Extreme (II) UVA - 11426 尤拉函式_數學推導
Code: #include<cstdio> using namespace std; const int maxn=4000005; const int R=4000002; const int N=4000002; long long sumv
BZOJ4869 六省聯考2017相逢是問候(線段樹+尤拉函式)
由擴充套件尤拉定理,a^(a^(a^(……^x)))%p中x作為指數的模數應該是φ(φ(φ(φ(……p)))),而p取log次φ就會變為1,也即每個位置一旦被修改一定次數後就會變為定值。線段樹維護區間剩餘修改次數的最大值,暴力修改即可。 可以預處理出每個位置進行k次操作後的值。直接計算是log^3的
HDU 5514.Frogs-尤拉函式 or 容斥原理
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 4904 &n
尤拉函式(模板)
#include <iostream> #include <cmath> using namespace std; int oula(int n) { int ans=n; int i; for(i=2;i<=sqrt(n);i++) {
(尤拉函式應用)1040 最大公約數之和
1040 最大公約數之和 1 秒 131,072 KB 80 分 5 級題 給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,