zoukankan      html  css  js  c++  java
  • 2020 Ateneo de Manila University DISCS PrO HS Division

    打这场的时候处于玄学状态,这 sb 题竟然搞了一个多小时

    传送门

    提供一个和题解不同的方法


    【题意】

    若给定正整数 (n) ,可以将其所有因数累乘,得到 (m)

    现给定 (m) ,问是否存在该 (n)

    (mleq 10^{15})


    【分析】

    (displaystyle n=prod_i p_i^{k_i}) 的因数个数为 (displaystyle oldsymbol d(n)=prod_i (1+k_i))

    (displaystyle m=prod_i (prod_{j=1}^{k_i} p_i^j)^{prod_{j eq i}(1+k_j)}=prod_i (p_i^{k_i(k_i+1)over 2})^{oldsymbol d(n)over k_i+1}=(prod_i p_i^{k_i})^{oldsymbol d(n)over 2}=n^{oldsymbol d(n)over 2})

    (m^2=n^{oldsymbol d(n)})

    现在进行分类讨论:

    (oldsymbol d(n)geq 5) 时,由于 (mleq 10^{15}) ,故 (nleq m^{2over 5}leq 10^{15cdot {2over 5}}=10^6)

    因此,我们可以先枚举倍数,用 (O(nlog n)) 的时间对 (nleq 10^6) 的数字进行打表,之后暴力查表,查找是否存在 (n^{oldsymbol d(n)}=m^2)

    (oldsymbol d(n)=1)(n=1) 得出 (m=1),直接验证

    (oldsymbol d(n)=2)(nin Prime) 得出 (m=n)(O(sqrt m)) 验证

    (oldsymbol d(n)=3)(n=p^2, pin PrimeRightarrow m^2=n^3=p^6Rightarrow m=p^3)

    (p=m^{1over 3}leq 10^5) ,暴力枚举 (O(m^{1over 3})) 验证

    (oldsymbol d(n)=4)(m^2=n^4 o n=sqrt m) ,先验证 (sqrt m) 是否为整数;之后根据 (d(n)=4) 得出 (n=p^3wedge n=pq, p eq qwedge p,q in Prime)

    由于 (n=sqrt mleq 10^{7.5}) ,故直接 (O(sqrt n)) 枚举最小质因数 (i)

    (n=i^3) 则得出答案;否则判定是否 (n=i^2) 而不满足题意;最后 (O(sqrt n)) check ({nover i}) 是否为质数

  • 相关阅读:
    JS加载机制
    js原型和原型链(用代码理解代码)
    解决echarts图形由于label过长导致文字显示不全问题
    微信小程序setData()异常
    Add GNOME to a CentOS Minimal Install
    vim的tab缩进及用空格设置
    ORA-12547: TNS:lost contact
    python+Django实现Nagios自动化添加监控项目
    python <tab>自动补全
    电信服务规范
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/14757682.html
Copyright © 2011-2022 走看看