尤拉函式 最大素因數 素數判斷 素數表

2021-07-16 04:47:31 字數 1358 閱讀 2619

求尤拉函式(小於等於n的數中與n互質的數的數目)

求最大素因數

打素數表

判斷乙個數是否是素數

在一些題目中,需要先提前暴力出最大值,否則會超時。

1的尤拉函式值是1,但是看題目說明,有些題目認為小於等於,有些只有小於

1與任何數互質

不與n互質的數不一定是n的約數

最後的n>1是為了處理當n是兩個素數相乘或者是乙個素數的情況。

尤拉函式:

數論中,對於正整數n,尤拉函式是小於等於n的數中與n互質的數的數目。 原理:素數冪分解後,f(n) = n*(1-1/p1)…..(1-1/pk) (容斥原理變形) 單獨求尤拉的函式實現過程恰好相反。 最小的質數是2,1不是質數。 用一變數儲存i,最後乙個i即最大素因數。

//求尤拉函式

long

long euler_phi(long

long n)

if(n == 1) break;

}if(n>1)

ans = ans / n * (n-1);

return ans;

}//求n以內的尤拉函式值

//每乙個素數的倍數都除去這個素數的影響。

const

int maxn = 10000001;

int phi[maxn+5];

void phi_table()}}

}

求n!的尤拉函式對mod的餘數。

const

int n = 10000000;

bool primetable[n+5];

void make_primetable()

}}const

int maxn = 10000000;

const

int mod = 100000007;

long

long phi[maxn+5];

void phi_table()

}

題目中資料量大(大於sqrt(n))往往需要先打表

//生成素數表

//線性複雜度,10^8需要101ms左右

//the prime's size = n/lnn; more than 10^5 can use 10

const

int maxn = 100000000;

bool isprime[maxn+5];

vector

prime;

void cac_prime()

}}

素數判斷

bool isprime(int x)

尤拉函式 素數篩

尤拉發現求小於等於n的正整數中有多少個數與n互質可以用這個公式 euler x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有素因數,x是不為0的整數。euler 1 1 唯一和1互質的數就是1本身 尤拉公式的延伸 乙個數的所有質因子之和是e...

判斷素數與尤拉篩

對於乙個數,判斷是否為素數,按照性質暴力列舉每乙個,時間複雜度就是o n 今天,不討論這個,討論一下更高效的方法。這是我在一篇部落格看到的方法,時間複雜度為o sqr n 3 方法3 首先看乙個關於質數分布的規律 大於等於5的質數一定和6的倍數相鄰。例如5和7,11和13,17和19等等 證明 令x...

數論 素數 素數相關基礎 尤拉函式與尤拉定理

尤拉定理與尤拉函式在數論方面的應用十分廣泛,幾乎所有的形如a n k 1的東西都可以往上靠。這裡暫時不細說怎麼用,先講基礎內容。1 尤拉函式 尤拉函式 n 表示不超過n且與n互素的正整數的個數 計算公式為 n n 1 1 p1 1 1 p2 其中p1,p2 為n的質因數 2 尤拉定理 若a,n是正整...