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