您的位置:首页 > 其它

NOIP2009Hankson 的趣味题

2016-11-09 20:29 288 查看
题目来源:https://www.luogu.org/problem/show?pid=1072

这题暴力枚举就可以过。

由(x,a0)=a1,[x,b0]=b1

推出a1|x,x|b1,(x/a1,a0/a1)=1,(b1/x,b1/b0)=1。

枚举x。

代码:

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int main()
{
int _;scanf("%d",&_);
for(int k=1;k<=_;k++)
{
int a0,a1,b0,b1;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
if(a0%a1!=0||b1%b0!=0){printf("0\n");continue;}
int tot=0;
for(int x=1;x*x<=b1;x++)
{
if(b1%x==0)
{
if((x%a1==0&&gcd(x/a1,a0/a1)==1)&&(gcd(b1/x,b1/b0)==1))tot++;
if(x*x==b1)continue;
int t=b1/x;
if(t%a1==0&&(gcd(t/a1,a0/a1)==1)&&(gcd(b1/t,b1/b0)==1))tot++;
}
}
printf("%d\n",tot);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: