20pts RE

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

d909RCA @ 2024-01-24 20:38:56

#include <bits/stdc++.h>
using namespace std;
int a,b,ans;
int gcd(int a,int b)
{
    if(max(a,b)%min(a,b)==0) return min(a,b);
    gcd(min(a,b),max(a,b)%min(a,b));
}
int main()
{
    cin>>a>>b;
    for(int i=a;i<=b;i++)
    {
        int j=a*b/i;
        if(gcd(i,j)==a&&i*j/gcd(i,j)==b) ans++;
    }
    cout<<ans<<endl;
    return 0;
}

by muruiqi @ 2024-02-19 11:22:34

@d909RCA 你在gcd函数中的变量a,b与全局变量重名。


by d909RCA @ 2024-02-19 13:57:54

@muruiqi 谢谢


by d909RCA @ 2024-02-19 13:59:34

@d909RCA 但是没用


by muruiqi @ 2024-05-03 14:12:20

@d909RCA 请用此代码试试。

#include <bits/stdc++.h>
using namespace std;
int a,b,ans;
int _gcd(int x,int y)
{
    while(x%y!=0)
    {
        int z=x%y;
        x=y;
        y=z;
    }
    return y;
}    
int main()
{
    cin>>a>>b;
    for(int i=a;i<=b;i++)
    {
        int j=a*b/i;
        if(_gcd(i,j)==a&&i*j/_gcd(i,j)==b) 
            ans++;
    }
    cout<<ans<<endl;
    return 0;
}


by muruiqi @ 2024-05-03 14:15:26

@d909RCA 你RE的原因是用递归求解gcd(),所以当数据较大时会爆栈,可以用辗转相除法求解。

对不起,刚看到。


by d909RCA @ 2024-05-04 09:11:22

@muruiqi 谢谢,刚AC


|