zoukankan      html  css  js  c++  java
  • 洛谷1072(gcd的运用)

    已知正整数a0,a1,b0,b1,设某未知正整数x满足:

    1. xa0 的最大公约数是 a1

    2. xb0 的最小公倍数是b1

    Hankson 的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x 并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的 x 的个数。请你帮助他编程求解这个问题。

    输入输出格式

    输入格式:

    第一行为一个正整数 n,表示有 n 组输入数据。接下来的 n 行每行一组输入数据,为四个正整数 a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入数据保证 a0 能被 a1 整除,b1 能被 b0 整除。

    输出格式:

    n 行。每组输入数据的输出结果占一行,为一个整数。

    对于每组数据:若不存在这样的 x,请输出 0;

    若存在这样的 x,请输出满足条件的x的个数;

    输入输出样例

    输入样例#1:
    2 
    41 1 96 288 
    95 1 37 1776 
    输出样例#1:
    6 
    2

    说明

    【说明】

    第一组输入数据,x可以是 9,18,36,72,144,288,共有 6 个。

    第二组输入数据,x可以是48,1776,共有 2 个。

    【数据范围】

    对于 50%的数据,保证有 1≤a0,a1,b0,b1≤10000n100。

    对于 100%的数据,保证有 1≤a0,a1,b0,b1≤2,000,000,000n≤2000

    NOIP 2009 提高组 第二题

    学习大佬的思路~

    纸上写一下题面即:gcd(x, a0) = a1; lcm(x, b0) = b1;

    然后按照gcd的常用套路变换一下可知gcd(x / a1, a0 / a1) = 1。而lcm即为x * b0 / gcd(x, b0) = b1,做一下等式变换并使用同样的套路可得gcd(b1 / x, b1 / b0) = 1。

    那么x为b1的约数,就可以√b1去枚举了,同时满足上述两个条件即可。记得枚举x的时候b1 / x也顺便判断一下,以及不可以用a1的倍数去枚举x,因为有些x虽然不是a1的倍数,但b1 / x却是,会漏。

     1 #include <cstdio>
     2 #include <algorithm>
     3 #define R(x) scanf("%d", &x)
     4 #define W(x) printf("%d
    ", x)
     5 using namespace std;
     6 
     7 int main() {
     8     int T, a0, a1, b0, b1;
     9 
    10     R(T);
    11     while (T--) {
    12         R(a0), R(a1), R(b0), R(b1);
    13 
    14         int ans = 0;
    15         int p = a0 / a1, q = b1 / b0;
    16 
    17         for (int x = 1; x * x <= b1; x++)
    18             if (b1 % x == 0) {
    19                 if (x % a1 == 0 && __gcd(x / a1, p) == 1 && __gcd(b1 / x, q) == 1)
    20                     ans++;
    21 
    22                 int y = b1 / x;
    23                 if (x == y)
    24                     continue;
    25 
    26                 if (y % a1 == 0 && __gcd(y / a1, p) == 1 && __gcd(b1 / y, q) == 1)
    27                     ans++;
    28             }
    29 
    30         W(ans);
    31     }
    32 
    33     return 0;
    34 }
  • 相关阅读:
    bzoj 1030 [JSOI2007]文本生成器
    Swift 学习笔记 (闭包)
    Swift 学习笔记 (函数)
    HTML 学习笔记 JQueryUI(Interactions,Widgets)
    HTML 学习笔记 JQuery(表单,表格 操作)
    HTML 学习笔记 JQuery(animation)
    HTML 学习笔记 JQuery(盒子操作)
    HTML 学习笔记 JQuery(事件)
    HTML 学习笔记 JQuery(DOM 操作3)
    HTML 学习笔记 JQuery(DOM 操作2)
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10220335.html
Copyright © 2011-2022 走看看