1.定义
质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式 [1] 。只有一个质因子的正整数为质数。
每个合数都可以写成几个质数(也可称为素数)相乘的形式 [2] ,这几个质数就都叫做这个合数的质因数。如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数;而这个因数一定是一个质数。
2.欧拉函数
欧拉函数,解决的是小于等于n的正整数中与n互质的的数的数目。
点击此处,获得解释
下面是欧拉函数的实现
#include <iostream>
using namespace std;
int euler(int n) {
int res = n;
for (int i = 2; i <= n; i++) {
if (n % i == 0) {
res = res - res / i; //要填的部分
while (n % i == 0) {
n /= i;
}
}
}
return res;
}
int main() {
int n;
cin >> n;
cout << euler(n) << endl;
return 0;
}
3.质因数相关问题
1.比如让你求一个数的分解质因数相关例题
2.让你输出一个数的最大质因数。
等等问题
我们都可以改欧拉函数进行解决。而且效率非常高。(甚至远远小于o(n)的复杂度)
下面是输出一个数的最大质因数的代码
#include<iostream>
using namespace std;
int euler(int n) {
int maxx = 0;
int tem = n;
for (int i = 2; i <=n && tem != 1; i ++) {
if (tem % i == 0){
maxx = max(maxx, i);
while(tem % i == 0) {
tem /= i;
}
}
}
return maxx;
}
int main() {
int n = 460897024;
cout << euler(n);
}