Sun13 @ 2024-07-22 13:19:09
第6和第10个点的TLE烦死了
#include<bits/stdc++.h>
using namespace std;
long long a,b,sum=0;
long long gcd(long long a,long long b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
scanf("%lld%lld",&a,&b);
for(long long n=1; n<=a*b; n++){
long long m=a*b/n;
if(n*m!=a*b) continue;
long long x=gcd(n,m),y=n*m/x;
if(x==a&&y==b) sum++;
}
printf("%d\n",sum);
return 0;
}
谁有更好的方法吗?
by CheeseFunction @ 2024-07-22 13:26:11
你可以试一试STL中的__gcd(int x,int y)
函数,其返回值为x
和y
的最大公因数
by __Nebula__ @ 2024-07-22 13:26:21
枚举到根号(a*b)就可以了
by __Nebula__ @ 2024-07-22 13:28:52
#include<bits/stdc++.h>
using namespace std;
inline int gcd(int x, int y){
if(y == 0) return x;
return gcd(y, x % y);
}
long long a,b,c,d,e,f,ans;
int main()
{
scanf("%lld %lld",&a,&b);
for(int i=1;i<=sqrt(a*b);i++)
{
if(a*b%i==0&&gcd(i,a*b/i)==a)
{
ans++;
}
}
if(a==b)
{
printf("%d",ans);
}
else
{
printf("%d",ans*2);
}
return 0;
}
by xiao_qiu @ 2024-07-22 13:47:35
@jizhiyinnitaimei 最好是把sqrt函数放在外面,省一点调用时间,设个变量就行了
by __Nebula__ @ 2024-07-22 13:55:56
@xiao_qiu 谢谢指点