提取公共质因数

来源:百度知道 编辑:UC知道 时间:2024/06/15 14:38:54
我将两数分解质因数的程序如下(用c语言)
#include"math.h"
#include"stdio.h"
int fjzys(int x)
{
int i;
for(i=2;i<=x;i++)
{ while(x!=i)
{if(x%i==0)
{
printf("%d*",i);

x=x/i;
}
else
break;
}
}
printf("%d\n",x);
return 0;
}
int main()
{
int m,n;
scanf("%d,%d",&m,&n);
fjzys(m);
fjzys(n);
return 0;
}
现在我想问上述程序该如何改进才能将这两个数(m,n)的公共质因数提取出来,再将提取出来的公共质因数相乘得出结果。

int fjzys(int x,int y,int a[],int *sum)
{
int i,s=1,z,j=0;
z=x<y?x:y;/*由于当I小于两个数中最小的数就可以退出了,所以求最小的那个数就可以了*/
for (i=2;i<=z;i++)
{
while (x!=i&&y!=i)
{
if (x%i==0&&y%i==0)
{
s=s*i;/*求积*/
a[j++]=i;/*保存公共因子*/
x=x/i;
y=y/i;
}
else
break;
}
}
*sum=s;/*传回公共质因子的积*/
return j;/*返回公共质因子个数*/
}
main()
{
int i,j,m,n,sum,a[10];/*定义数组用于保存共同质因子的数*/
clrscr();
printf("please enter two numberes:\n");
scanf("%d%d",&m,&n);
j=fjzys(m,n,a,&sum);/*J用于求公共的质因子个数,SUM是作为地址将求出的公共质因子传过来输出*/
printf("ji=%d\n",sum);/*输出公共的质因子乘积*/
printf("gong gong zhi yin zi is:\n");
for (i=0;i<j;i++)/*输出公共的质因子*/
printf("%d ",a[i]);
}
能看懂吧,只是SUM用了指针,原因是要作为地址传回积!
注解很详细了