zoukankan      html  css  js  c++  java
  • Luogu_P1072 Hankson 的趣味题 gcd

    Luogu_P1072 Hankson 的趣味题

    gcd


    题目链接
    就是求
    (gcd(x,a0)=a1)
    (lcm(x,b0)=b1)
    (x)合法的数量
    首先有一个很显然的等式
    (gcd(x/a1,a0/a1)=1)
    可以根据(gcd)的性质证出来
    那么就剩下另一个等式了
    (lcm(x,b0)=x*b0/gcd(x,b0))
    (gcd(x,b0)=x*b0/b1)
    再根据第一个性质
    (gcd(x/(x*b0/b1),b0/(x*b0/b1))=gcd(b1/b0,b1/x)=1)
    其实上面的式子就等同于:
    (gcd(x/a1,a0/a1)=1)
    (gcd(b1/b0,b1/x)=1)
    而且我们还知道x是b1的约数
    那么就可以枚举b1约数然后验证符不符合两个式子
    如果符合那么(ans++)


    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int n,ans=0;
    inline int gcd(int x,int y){
    	return y ? gcd(y,x%y) : x;
    }
    int main()
    {
    	scanf("%d",&n);
    	while(n--){
    		int a0,a1,b0,b1;ans=0;
    		scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
    		for(int x=1;x*x<=b1;x++) if(!(b1%x)){
    			if(x%a1==0 && gcd(x/a1,a0/a1)==1 && gcd(b1/b0,b1/x)==1) ans++;
    			int y=b1/x;
    			if(x==y) continue;
    			if(y%a1==0 && gcd(y/a1,a0/a1)==1 && gcd(b1/b0,b1/y)==1) ans++;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    铁大电梯调度需求分析
    结对开发2
    四则运算3
    团队开发——冲刺2.d
    团队开发——冲刺2.c
    团队开发——冲刺2.b
    团队开发——冲刺2.a
    团队开发——冲刺1.g
    团队开发——冲刺1.f
    团队开发——冲刺1.e
  • 原文地址:https://www.cnblogs.com/ChrisKKK/p/11693217.html
Copyright © 2011-2022 走看看