Ceceliaaa 2023-10-13 10:24 采纳率: 66.7%
浏览 8

最大公约数最小公倍数

巨佬萌,为什么这样做会有测试点不能通过呢,我自己看了好几遍,实在是找不出原因了

img

img


码源如下

#include<stdio.h>
int if_is_maxessential(int n,int m,int essential);
int main(void)
{
    int input1,input2,dis1,dis2,ans=0;
    scanf("%d %d",&input1,&input2);
    
    for(dis1=2;dis1<=input2;dis1++)
    {
        if((input1*input2)%dis1==0)
        {
            dis2=(input1*input2)/dis1;
            if(if_is_maxessential(dis1,dis2,input1))
                ++ans;
        }
    }
    printf("%d",ans);
    
    return 0;
 } 
 int if_is_maxessential(int n,int m,int essential)
 {
     int min,i,essen;
     min=(n<m)?n:m;
     for(i=2;i<=min;i++)
     {
         if( (n%i==0)&&(m%i==0))
                 essen=i;
     }
     
     if(essen==essential)
         return 1;
    else return 0;     
 }


  • 写回答

2条回答 默认 最新

  • 失控的程序猿 2023-10-13 10:40
    关注

    主要计算了两个整数input1和input2的最小公倍数(LCM)的个数,满足以下条件:

    LCM是两个整数input1和input2的因子。
    LCM除了是input1和input2的因子之外,没有其他因子。
    这个代码的逻辑在大多数情况下是正确的,但有一个潜在的问题,可能会导致结果不准确。问题在于if_is_maxessential函数中的逻辑。在该函数中,您尝试找到n和m的最大公约数(GCD),然后与输入的essential进行比较。但是,在循环中,只有当循环结束时的essen等于essential时,才返回1。这可能会导致一些情况下的错误结果。

    具体来说,如果n和m的GCD不等于essential,但在循环中有多个因子满足条件 (n % i == 0) && (m % i == 0),则最终essen的值将是循环中的最后一个因子,而不是GCD。这可能导致错误的结果。

    为了纠正这个问题,您可以在找到GCD后立即返回1,而不是在循环结束时。以下是修复后的代码:

    int if_is_maxessential(int n, int m, int essential) {
        int min, i, essen;
        min = (n < m) ? n : m;
        for (i = 2; i <= min; i++) {
            if ((n % i == 0) && (m % i == 0)) {
                essen = i;
                if (essen == essential) {
                    return 1; // 找到GCD并匹配essential,返回1
                }
            }
        }
        return 0; // 循环结束,未找到匹配essential的GCD
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 10月13日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验