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
阅读全文
0 0
- C语言 C语言分解质因数的算法,以及动态一维数组保存分解的质因数的每一项
- C语言实现 N!的质因数分解
- C语言经典算法:如何较快的分解质因数
- C语言分解质因数
- 【C语言】分解质因数
- c语言:分解质因数
- C语言分解质因数
- C语言-分解质因数
- C语言-分解质因数
- 【c语言】分解质因数
- C语言 > 分解质因数
- 初级C语言算法实现分解质因数
- 水仙花数&素数&质因数分解的C语言实现
- C语言实现分解质因数
- c算法-分解质因数
- 整数的质因数分解算法
- c语言:将一个正整数分解质因数
- 分解质因数-week6-C语言习题集
- C#键盘输入方法(Input.GetKey()和Input.GetKeyUp())需要注意的一个问题(一个U3D初学者的总结)
- Linus常用命令(超详细)
- 自动返回顶部的实现
- 如何查看自己电脑是否安装jdk和安装路径
- win10下安装theano和keras
- C语言 C语言分解质因数的算法,以及动态一维数组保存分解的质因数的每一项
- 十一假期前一定要看的一篇文
- CS231n学习笔记--10.Recurrent Neural Networks
- 重建二叉树
- RNN和LSTM相关资料汇总
- 递归与分治策略-2.7合并排序(归并排序)
- 利用pycharm编辑jupyter notebook
- MariaDB二进制安装步骤以及数据库的基本操作
- ActiveMQ之浅谈一