C语言 C语言分解质因数的算法,以及动态一维数组保存分解的质因数的每一项

来源:互联网 发布:sqlserver 实例名称 编辑:程序博客网 时间:2024/06/05 04:31

这里保存下,C语言分解质因数的算法,以及动态一维数组保存分解的质因数的每一项。。。。

/**分解质因数法求最小公倍数,最大公约数,我写不下去了,这里是分解质因数的方法,和返回质因数的动态数组*//*质因数分解法质因数分解质因数分解法:最大公约数:    把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数。例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24、60)=12。最小公倍数:   把几个数先分别分解质因数,再把各数中的全部  公有的质因数  和  独有的质因数  提取出来连乘,            所得的积就是这几个数的最小公倍数。例如:求6和15的最小公倍数。先分解质因数,得6=2×3,15=3×5,6和15的全部公有的质因数是3,6独有质因数是2,15独有的质因数是5,2×3×5=30,30里面包含6的全部质因数2和3,还包含了15的全部质因数3和5,且30是6和15的公倍数中最小的一个,所以[6,15]=30。*/#include<stdio.h>int* PrimeFactor(int n);int main(){//    int n;//    printf("输入合数:");//    scanf("%d",&n);//    printPrimeFactor(n);//    int* PrimeFactor1=PrimeFactor(n);//    //打印动态数组里面存储的质因数//    printPrimeFactor1(PrimeFactor1);    int* PrimeFactor2=PrimeFactor(45);//分解45的质因数,并且返回动态数组    printPrimeFactor1(PrimeFactor2);    int* PrimeFactor3=PrimeFactor(30);    printPrimeFactor1(PrimeFactor3);//    free(PrimeFactor1);//释放空间    free(PrimeFactor2);    free(PrimeFactor3);    return 0;}void printPrimeFactor(int n)//对数n分解质因数{    printf("分解质因数:%d=",n);    int factor=2;//最小的质因数为2    int flag=0;    while (factor <= n)//合数大于等于因数    {        if (n % factor == 0)//刚开始是除以2这个质数,一直除到到没有2的质数因数为止        {            n = n / factor;//除以这个质数            if(flag==0)//if/else语句只是为了不输出第一个乘号“*”                flag=1;            else                printf("*");//输出乘号            printf("%d",factor);//输出质因数        }        else        {            factor++;//质因数加一,        }    }}int* PrimeFactor(int n)//对数n分解质因数{    int length=1;    int* PrimeFactor=(int*)malloc(sizeof(int)*length);//申请一个空间    printf("分解质因数:%d=",n);    int factor=2;//最小的质因数为2    int flag=0;    int i=0;    while (factor <= n)//合数大于等于因数    {        if (n % factor == 0)//刚开始是除以2这个质数,一直除到到没有2的质数因数为止        {            n = n / factor;//除以这个质数//            if(flag==0)//if/else语句只是为了不输出第一个乘号“*”//                flag=1;//            else//                printf("*");//输出乘号//            printf("%d",factor);//输出质因数            PrimeFactor[i++]=factor;//把这个存到动态数组中            length++;//动态数组长度加一,是这样的话那动态数组最后一个元素多久永远用不到了。。。            PrimeFactor=(int*)realloc(PrimeFactor,length);//重新分配空间,并拷贝之前的数据到新的空间里            PrimeFactor[i]=-1;//写入一个负数表示动态一维数组的尾部        }        else        {            factor++;//质因数加一,        }    }    return PrimeFactor;//返回这个动态的数组}void printPrimeFactor1(int *PrimeFactor1){    int flag=0;    while(*PrimeFactor1!=-1)    {        if(flag)//如果flag==1            printf("*");        else            flag=1;//如果flag==0,        printf("%d",*PrimeFactor1++);//先从动态数组中取出值,然后指针前移    }}
结果:

分解质因数:45=3*3*5分解质因数:30=2*3*5


原创粉丝点击