質因數分解(唯一分解定理)

                      質因數分解(唯一分解定理)

基本概念:

每個合數都可以寫成幾個質數相乘的形式,其中每個質數都是這個合數的因數,叫做這個合數的分解質因數。 分解質因數只針對合數。

並且,每個合數能夠且僅僅能夠被分解爲唯一一組質因數的乘積。


介紹與證明:

質因數分解一般用來求解對一個整數的分解。


算法實現:

注意:以下只是一個介紹性質的代碼,實際的質因數分解將使用素數篩法預處理後進行分解。


#include<stdio.h>

intm,b,c=0,j=0;

inta[10];    //存放質因數

int fjzys(intk)

{

    int i=2;

    while(k>=i)    //判斷k是否合格      

    {

        if(k%i==0)    //判斷k是否整除當前因數

        {

            a[j]=i;    //存入因數

            k/=i;    //餘數

            i=2;    //i重新等於2

            j++;    //計數值

        }

        else

        {

            i++;    //不能整除則當前因數爲非質因數

        }

    }

    return 0;

}



/* for實現上面的函數

int fjzys(intk)

{

    int i=2;

    for ( ; i<=k ; i++ )    //當因數i<=k時,實現該循環,每次循環因數i自加1

        for ( ; k%i==0 ; j++ )   //k整除當前因數,實現該循環,每次循環下標j自加1

        {

            k/=i;   //使k=k/i

            a[j]=i;   //存入因數

        }

    return 0;

}

解決上面的函數,無法輸出,多個相同的質因數,如90=2*3*3*5,只能輸出一個3.

*/

 

void main()

{

    printf("請輸入一個整數\nk=");

    scanf("%d", &m);

    fjzys(m);

    for(b=0;b<(j-1);b++)    //*比質因數少一個

    {

        printf("%d",a[b]);

        printf("*");

    }

    printf("%d\n",a[j-1]);    //輸出最後一個質因數

}




推薦習題:

HDU 5428

HDU 1215












~step by step

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