判斷 素數(質數) 和 質因式分解 問題

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章