码迷,mamicode.com
首页 > 其他好文 > 详细

Hankson的趣味题 未完待续

时间:2018-08-12 22:51:16      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:sqrt   ==   pac   ++   std   int   iostream   main   stream   

gcd(x,a0)=a1  lcm(x,b0)=b1   枚举x

                      (x*b0)/gcd(x,b0)=b1  ->  x=(b1/b0)*gcd(x,b0)  枚举gcd(x,b0),gcd(x,b0)是b0的一个约数  ->  枚举b0的约数

                                                                                                                                                                         注意b0是完全平方数时要特判

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int x,ans,a0,a1,b0,b1;
int gcd(int a,int b){
    if(b==0) return a;
    return gcd(b,a%b);
}
int main(){
    int n;cin>>n;
    while(n--){
        ans=0;
        cin>>a0>>a1>>b0>>b1;
        if(b1%b0!=0){
            cout<<0<<endl;
            continue;
        }
        for(int i=1;i<sqrt(b0);i++){
            if(b0%i==0){
                x=b1/b0*i;
                if(gcd(x,b0)==i&&gcd(x,a0)==a1) ans++;
                x=b1/b0*(b0/i);
                if(gcd(x,b0)==b0/i&&gcd(x,a0)==a1) ans++;
            }
        }
        int k=sqrt(b0);//如果放到上面去,相同的一个数会多加一次 
        if(k*k==b0&&b0%k==0){
            x=b1/b0*k;
            if(gcd(x,b0)==k&&gcd(x,a0)==a1) ans++;
        }
        cout<<ans<<endl;
    }
    return 0

 

Hankson的趣味题 未完待续

标签:sqrt   ==   pac   ++   std   int   iostream   main   stream   

原文地址:https://www.cnblogs.com/lcan/p/9465266.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!