c_yanye_w @ 2024-10-30 22:12:29
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
long long x,y,cnt,tot,d[100005];
int gcd(int a,int b)
{
if(a<b)
{
int t=a;
a=b;
b=t;
}
while(b)
{
int t=a%b;
a=b;
b=t;
}
return a;
}
int main()
{
scanf("%lld %lld",&x,&y);
if(x==y)
{
printf("1");
return 0;
}
for(int i=x;i<=y;i++)
{
if(i%x==0 && y%i==0)
d[tot++]=i;
}
for(int i=0;i<tot;i++)
{
int t;
for(int j=i;j<tot;j++)
{
t=gcd(d[i],d[j]);
if(t==x && d[i]*d[j]/t==y)
cnt+=2;
}
}
printf("%lld",cnt);
return 0;
}
by luogu_li4zi3 @ 2024-11-02 07:16:34
,很好的时间复杂度。当x=2,y=100000时,就是O(106136)$,这应该是最坏的了,不过在洛谷上应该花不了多少时间(2毫秒?)
by LionBlaze @ 2024-11-21 19:50:59
@luogu_li4zi3