質因數分解(唯一分解定理)
基本概念:
每個合數都可以寫成幾個質數相乘的形式,其中每個質數都是這個合數的因數,叫做這個合數的分解質因數。 分解質因數只針對合數。
並且,每個合數能夠且僅僅能夠被分解爲唯一一組質因數的乘積。
介紹與證明:
質因數分解一般用來求解對一個整數的分解。
算法實現:
注意:以下只是一個介紹性質的代碼,實際的質因數分解將使用素數篩法預處理後進行分解。
#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