质因数分解(唯一分解定理)
基本概念:
每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
并且,每个合数能够且仅仅能够被分解为唯一一组质因数的乘积。
介绍与证明:
质因数分解一般用来求解对一个整数的分解。
算法实现:
注意:以下只是一个介绍性质的代码,实际的质因数分解将使用素数筛法预处理后进行分解。
#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