博客
关于我
P1072 Hankson 的趣味题 数学或者模拟【1】
阅读量:215 次
发布时间:2019-02-28

本文共 1700 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要找到满足特定条件的正整数 ( x )。具体来说,给定四个正整数 ( a_0, a_1, b_0, b_1 ),我们需要找到满足以下条件的正整数 ( x ):

  • ( x ) 和 ( a_0 ) 的最大公约数是 ( a_1 );
  • ( x ) 和 ( b_0 ) 的最小公倍数是 ( b_1 )。
  • 方法思路

    为了找到满足条件的 ( x ),我们可以将问题分解为以下步骤:

  • 分解素因数:首先,我们需要分解给定的数的素因数。我们将使用一种函数来对一个数进行素因数分解。

  • 计算最大公约数:计算 ( a_0 ) 和 ( b_1 ) 的最大公约数。这将帮助我们确定 ( x ) 的结构。

  • 计算满足条件的因数数目:我们需要找到满足条件的 ( x ) 的个数。具体来说,我们需要计算 ( b_1 ) 的因数中满足与 ( a_0 ) 的最大公约数 ( a_1 ) 互质的数的个数。

  • 解决代码

    import sysimport mathfrom math import gcdfrom collections import defaultdictdef factorize(n):    factors = defaultdict(int)    while n % 2 == 0:        factors[2] += 1        n = n // 2    i = 3    while i * i <= n:        while n % i == 0:            factors[i] += 1            n = n // i        i += 2    if n > 2:        factors[n] += 1    return factorsdef count_factors(n_val, g):    if g == 1:        return 1    factors_g = factorize(g)    factors_n = factorize(n_val)    count = 1    for p in factors_n:        if p not in factors_g:            count *= (factors_n[p] + 1)    return countdef main():    input = sys.stdin.read().split()    idx = 0    n = int(input[idx])    idx +=1    for _ in range(n):        a0 = int(input[idx])        a1 = int(input[idx+1])        b0 = int(input[idx+2])        b1 = int(input[idx+3])        idx +=4                m = a0 // a1        n_val = b1 // a1        g = gcd(m, n_val)                ans = count_factors(n_val, g)        print(ans)if __name__ == "__main__":    main()

    代码解释

  • factorize 函数:这个函数用于分解一个数的素因数,并返回一个字典,其中键是素因数,值是对应的幂次。

  • count_factors 函数:这个函数计算给定数 ( n ) 的因数中,排除最大公约数 ( g ) 的素因数的数目。这一步确保我们只考虑那些满足与 ( m ) 互质的因数。

  • main 函数:读取输入数据,处理每组输入,计算 ( m ) 和 ( n ) 的最大公约数 ( g ),然后调用 count_factors 函数计算满足条件的 ( x ) 的个数。

  • 通过这种方法,我们可以高效地解决这个问题,并找到满足条件的正整数 ( x ) 的个数。

    转载地址:http://qvki.baihongyu.com/

    你可能感兴趣的文章
    PostgreSQL学习总结(7)—— PostgreSQL 语句 INSERT INTO、SELECT、UPDATE、DELETE 等学习
    查看>>
    PostgreSQL学习总结(8)—— PostgreSQL 基于数据库和基于模式(schema)的多租户分析
    查看>>
    PostgreSQL学习总结(9)—— PostgreSQL 运算符与表达式
    查看>>
    PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
    查看>>
    PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
    查看>>
    PostgreSQL学习笔记:PostgreSQL vs MySQL
    查看>>
    PostgreSQL实现shape数据转geojson数据(地图工具篇.18)
    查看>>
    PostgreSQL导入shape数据(地图工具篇.10)
    查看>>
    PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
    查看>>
    PostGreSql工作笔记004---PostGreSql修改密码_windows和linux下修改
    查看>>
    Postgresql常用命令行操作_以及Navicat操作PostGis时的问题_自动截取长度_WKB structure does not match exp---PostgreSQL工作笔记005
    查看>>
    PostgreSQL忘记密码
    查看>>
    PostgreSQL数据库pg_dump命令行不输入密码的方法
    查看>>
    PostgreSQL新手入门
    查看>>
    postgresql树状结构查询示例
    查看>>
    PostgreSQL流复制参数max_wal_senders详解
    查看>>
    postgresql流复制配置
    查看>>
    PostgreSQL清空表并保留表结构、清空数据库还原数据库为新建时的状态的方法
    查看>>
    PostgreSQL的 initdb 源代码分析之九
    查看>>
    PostgreSQL的安装与使用指南
    查看>>