2023牛客暑期多校训练营5-D Cirno’s Perfect Equation Class
题目描述
思路
抓住c是b的倍数,而只有a和b两个未知数,我们可以枚举c的因子,再算出a判断 g c d ( a , b ) gcd(a,b) gcd(a,b)是否大于n即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int f[N];
int t;
int q,c,k,n;
int main()
{
cin>>q;
while(q--)
{
scanf("%d%d%d",&k,&c,&n);
t=0;
int ans=0;
for(int i=1;i*i<=c;i++)//分解质因数
{
if(c%i==0 && i*i!=c)
f[++t]=i,f[++t]=c/i;
if(c%i==0 && i*i==c)
f[++t]=i;
}
for(int i=1;i<=t;i++)
{
int b=f[i];
if((c-b)%k!=0)//判断此时的a是否为整数
continue;
int a=(c-b)/k;
if(a==0)
continue;
if(__gcd(a,b)>=n)
{
ans++;
}
}
printf("%d\n",ans);
}
}