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}) 是否为质数

  • 相关阅读:
    RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
    x 的平方根--二分查找
    责任链模式--设计模式
    迭代器模式--设计模式
    组合模式--设计模式
    搜索旋转排序数组II
    搜索旋转排序数组--二分查找
    搜索插入位置--二分查找
    越狱详解与调试--逆向开发
    有序链表转换二叉搜索树--链表
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/14757682.html
Copyright © 2011-2022 走看看