数论-欧拉函数与欧拉定理

欧拉函数

φ(i),不大于i且与i互质的个数

公式 φ(n) = n(1-1/p1)(1-1/p2)..(1-1/pk) (pi是质因子)

 
 

求法

1 直接求
int Phi(int N) {
	int m = (int)sqrt(N + 0.5), ans = N;
	for(int i=2; i<=m; i++)
		if(N % i == 0) {
			ans = ans / i * (i-1);
			while(N % i == 0) N /= i;
		}
	if(N > 1) ans = ans / N * (N-1);
	return ans;
}
2 线性筛
int phi[1001];
int phi_table(int n) {
	for(int i=2; i<=n; i++) phi[i] = 0;
	phi[1] = 1;
	for(int i=2; i<=n; i++) if(!phi[i])
		for(int j=i; j<=n; j+=i) {
			if(!phi[j]) phi[j] = j;
			phi[j] = phi[j] / i * (i-1);
		}
}

欧拉定理
若a与m互质,则 a^(φ(m)≡ 1(mod m)

猜你喜欢

转载自blog.csdn.net/Binary_Heap/article/details/79171798