质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。
分解质因数的算式叫短除法,和除法的性质相似,还可以用来求多个数的公因式。
//素数判断
int isPrime(u32 n) {
for (u32 i = 2; i < n; i++) {
//可以被别的数整除,不是素数
if (n % i == 0)
return 0;
}
return 1;
}
//质因数分解
int getPrimeFactor(u32 n) { //可以不返回值,此处返回-1表示出错,返回1表示正常。
//1以下的整数都不是素数
if (n < 2)
return -1;
//判断是否是素数,如果是直接输出
if (isPrime(n)) {
printf("%d\t", n);
return 1;
}
else {
//递归因式分解
for (u32 i = 2; i < n; i++) {
if (n % i == 0) {
printf("%d\t", i);
getPrimeFactor(n / i);
break;
}
}
}
return 1;
}
int main(void)
{
int a = 1000;
getPrimeFactor(a); //分机质因数
getchar();
return 0;
}
输出结果是:2 2 2 5 5