【NOIP 2009】 Hankson的趣味题

【题目链接】

            https://www.luogu.org/problemnew/show/P1072

【算法】

            x是b1的约数

            筛出b1的约数,判断是否符合条件即可

【代码】

           

#include<bits/stdc++.h>
using namespace std;

int i,a0,a1,b0,b1,cnt,ans,T;
int factor[100010];

inline int gcd(int x,int y)
{
        if (y == 0) return x;
        else return gcd(y,x%y);        
}
inline int lcm(int x,int y)
{
        return 1ll * x * y / gcd(x,y);
}

int main() 
{
        
        scanf("%d",&T);
        while (T--)
        {
                ans = 0;
                cnt = 0;
                scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
                for (i = 1; i <= sqrt(b1); i++)
                {
                        if (b1 % i == 0)
                        {
                                factor[++cnt] = i;
                                if (i * i != b1) factor[++cnt] = b1 / i;        
                        }        
                }
                for (i = 1; i <= cnt; i++)
                {
                        if (gcd(a0,factor[i]) == a1 && lcm(b0,factor[i]) == b1)
                                ans++;        
                }
                printf("%d\n",ans);
        }
        
        return 0;
    
}

 

posted @ 2018-07-09 12:44  evenbao  阅读(108)  评论(0编辑  收藏  举报