質數又稱素數。一個大於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