分解质因数求最大公约数

代码没问题就是结果一直为一放不了代码没办法11111112111111很简单的问题但是卡住我了有没有人帮忙看看的

应该是因为分解质因数和计算m和n的公共质因数那里需要改进下,修改如下:

参考链接:


https://blog.csdn.net/weixin_39737636/article/details/116988808

https://blog.csdn.net/weixin_29234423/article/details/116982469

#include<iostream>
using namespace  std;
int fenjie() {

    int m,n;
    cout<<"请输入m:";
    cin>>m;

    cout<<"请输入n:";
    cin>>n;

    int i,j;
    int c=0;
    int d=0;
    int result=1;
    int a[100],b[100];

    i=2;
    while(m!=1&&i<m) { // 计算m的质因数 

        while(m%i==0) {
            a[c]=i;
            m=m/i;
        //    printf("a[%d]=%d\n",c,a[c]);
        //    printf("i=%d,m=%d\n",i,m);
            if(m!=1) {
                c++;
            } else {
                break;
            }
        }
        i++;

    }

    i=2;
    while(n!=1&&i<n) {  // 计算n的质因数 

        while(n%i==0) {
            b[d]=i;
            n=n/i;
        //    printf("b[%d]=%d\n",d,b[d]);
        //    printf("i=%d,n=%d\n",i,n);
            if(n!=1) {
                d++;
            } else {
                break;
            }
        }
        i++;

    }


    i=0;
 // 求m和n的公共质因数 ,从m的第一个质因数逐个与n的每个质因数比较,如果相同,则累乘到结果中    
    while(i<=c) { 
        
        j=0;
        while(j<=d&&i<=c) { // 重复遍历n的每个质因数  
            
            if(a[i]==b[j]&&b[j]!=-1) {  //如果质因数相同,则累乘到结果中,同时将n的质因数数组此位置置-1,下次不再比较 
                result*=a[i];
            //    printf("a[%d]=%d,b[%d]=%d,result=%d\n",i,a[i],j,b[j],result);
                b[j]=-1;
                i++;  // 判断m的下一个质因数            
            }
            j++;  // 判断n的下一个质因数 
        }
        
        i++;  // 上面的循环结束,说明需要判断m的下一个质因数了 
    }

    return result;
}
int main() {

    cout<<"结果为 :"<<fenjie();
    return 0;

}






img

参考GPT和自己的思路:

很抱歉,根据你提供的问题描述,无法确定具体问题所在,因此无法提供具体的解决方法。建议你提供更多问题的细节和背景信息,并尽可能说明你所使用的算法、语言等等,以便更好地帮助你解决问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^