- 求欧拉函数(小于等于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) {
long long m = sqrt(n);
long long ans = n;
for(int i = 2; i <= m; i++) {
if(n%i == 0) { //用变量保存i即最大的素因数
ans = ans / i * (i-1);
while(n%i == 0)
n /= i;
}
if(n == 1) break;
}