一个疑问

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

Liboy53_I_HATE_MATH @ 2024-02-12 19:24:03

为什么自己构造gcd函数RE了,但用头文件里的AC了


by xiaoshumiao @ 2024-02-12 19:30:54

@Liboy53 放个代码


by __Rickysun__ @ 2024-02-12 19:33:00

@Liboy53 头文件里的都是大佬写的,自己的我也不知道你问题出在哪里

Where$ $is$ $your$ $code?

by __Rickysun__ @ 2024-02-12 19:34:20

@Liboy53 换句话说,头文件里是系统自带的,当然没有问题(不然我们就不会用这个软件了


by Liboy53_I_HATE_MATH @ 2024-02-12 19:50:13

AC代码

#include<bits/stdc++.h>
using namespace std;
int lcm(int a,int b){
    return a*b/__gcd(a,b);
}
int main(){
    int x,y,p,q,ans=0;
    cin>>x>>y;
    for(p=x;p<=y;p++)
    {
        q=x*y/p;
        if(__gcd(p,q)==x&&lcm(p,q)==y)
            ans++;
    }
    cout<<ans;
    return 0;
}

by Liboy53_I_HATE_MATH @ 2024-02-12 19:54:39

非AC构造的gcd是这样

long long gcd(int a,int b)
{
  return gcd(b,a%b);
}

by kevinZ99 @ 2024-02-12 19:56:07

@Liboy53

请问你的结束条件呢?????????????????????????


by yzm0325 @ 2024-02-12 19:59:47

@Liboy53 《无限递归》建议复习递归


by QWQ_HY_DFX @ 2024-02-12 20:01:11

@Liboy53

你这...结束条件没了,无限递归,按理会\LARGE TLE,不过因为你这个会出现\LARGE a\%0,所以会\LARGE RE,正常gcd是这么写的:


int gcd(int a,int b){
    if(!b)
      return a;
    return gcd(b,a%b);
}

by QWQ_HY_DFX @ 2024-02-12 20:02:48

不好意思稍微改下代码的细节(刚那段在编辑回复直接打的,是真的难看)

int gcd(int a,int b){
    if(!b)
        return a;
    return gcd(b,a%b);
}

by Liboy53_I_HATE_MATH @ 2024-02-12 20:09:03

感谢各位大佬,已关,此贴终


|