请问有人知道怎样用C/C++写一个用质因分解法求两个整数的最大公约数的算法

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:32:57
要求:先要分别找到两个数M,N的质因数,然后从两者的质因数分解式中找出公因数(如果P是一个公因数,且在M和N的质因数分解式,分别出现过Pm和Pn次,那么应该将P重复min{Pm,Pn}次),最后将找到的质因数相乘,其结果为给定数字的最大公约数
注:不能使用欧几里得法

#include<stdio.h>
int main()
{
int a,b,mi,ma,gys;
scanf("%d%d",&a,&b);
mi=a<b?a:b;
ma=a+b-mi;
while(mi!=0)
{
gys=mi;
if(ma%mi==0)break;
mi=ma%mi;
ma=gys;
}
printf("%d\n",gys);
return 0;
}

以下为你需要的程序,在不需要使用固定方式时建议使用简单的逻辑程序:
#include <stdio.h>
int main()
{
int i,j,m,n,k1,k2,tmp,maxgys=1;
int zysm[100],zysn[100],gys[100]; //质因数,公因数数组
scanf("%d%d", &m, &n); //输入
zysm[0] = zysn[0] = 1; //都有质因数1
for(i=2,k1=1,tmp=m; i<=m; i++) //从2开始找m的质因数组
{
if(tmp%i==0)
{
zysm[k1++]=i;
tmp /= i--;
}
}
for(i=2,k2=1,tmp=n; i<=n; i++) //从2开始找n的质因数组
{
if(tmp%i==0)