尤拉函式模板

2021-10-12 17:29:22 字數 1118 閱讀 8562

這個尤拉函式的**我調了半天,最後發現錯在乙個小細節上,直接當場崩潰。

所有的注釋都在**裡面,如果不懂的可以去別的地方看看原理。

模板如下:

#include

using

namespace std;

#define ll long long

#define inf 0x3f0x3f0x3f

#define max 1000000

ll phi[

max]

,primes[

max]

,primes2[

max]

;//phi是用來記錄每乙個數的尤拉函式值

//primes是用於記錄比n小的素數的值,實際上在本段**裡可有可無

//primes2是用於記錄可以由 n 分解出來的素數值

ll getpin

(ll n)

if(primes2[t]

)//如果這個素數是n的約數,就一定被記錄了,所以t加 1

++t;}}

ll sum=1;

for(

int i=

0;i)return sum;

//返回尤拉函式值

}int

main()

//常規的輸入輸出

下面在補充乙個尤拉函式的相關運用。

我們知道了尤拉函式的值後就相當於知道了小於n且與n互素的正整數的和

這裡直接上公式:

s=n*f(n)/2

其中 f(n)表示n的尤拉函式值。

例如:與7互素的有1,2,3,4,5,6

/*一開始我不認為1與7互素,但看了看互素的定義後就信了

a1與a2互素:a1與a2的最大公約數為 1 。

所以1與7的最大公約數為1,它們互素。

/這幾個數的和為21=n/2f(7)=7/2f(7)=7/25=21。

相同的,如果知道了小於n且與n互素的正整數之和後,就可以求出小於n且與n非素數的正整數之和。具體怎麼操作我就不演示了,就是用總數-和就ac了。

尤拉函式(模板)

尤拉函式介紹 尤拉函式,在數論中用於求解 1 n 中與 n 互質數個數 的函式,因為研究者為尤拉,故命名為尤拉函式。通式 x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1互質的數 小於等於1 就是1...

尤拉函式模板

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。例如euler 8 4,因為1,3,5,7均和8互質。euler函式表達通式 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 ...

尤拉函式模板

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。例如euler 8 4,因為1,3,5,7均和8互質。euler函式表達通式 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 ...