RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1530896
Accepted
Настя
Настя
Asked:2023-07-16 17:25:45 +0000 UTC2023-07-16 17:25:45 +0000 UTC 2023-07-16 17:25:45 +0000 UTC

Python代码优化

  • 772

我为该任务编写了代码:

По заданному натуральному числу N необходимо вычислить количество 
натуральных чисел, которые есть делителями N! (факториала числа N).

Например, при N=4, N!=4·3·2·1=24. Это число имеет следующие делители: 
1, 2, 3, 4, 6, 8, 12, 24. Таким образом, искомое количество составляет 8.

Напишите программу, которая по натуральному N, находит количество 
делителей его факториала.

Формат входных данных

Единственная строка входного файла содержит одно целое число N (1≤N≤45).

Формат выходных данных

Единственная строка выходного файла должна содержать одно целое 
число –найденное количество делителей числа N!

Примеры
входные данные
4
выходные данные
8

входные данные 
3
выходные данные 
4

我的代码:

from math import factorial
a=int(input())
n=factorial(a)
ans=0 
q=1
while q*q<n:
    if n%q==0:
        ans+=2
    q+=1
if q*q==n:
    ans+=1
print(ans)

但在检查系统的一些测试中,代码运行时间过长,请帮忙优化一下!!!

python
  • 2 2 个回答
  • 49 Views

2 个回答

  • Voted
  1. Best Answer
    MBo
    2023-07-16T18:55:56Z2023-07-16T18:55:56Z

    想想看 - 对于阶乘的每个下一个值,n!不需要重新搜索一个巨大数字的所有因子,你只需要考虑以下 - n!= (n-1)!*n,并找出乘以如何n改变因子的数量。为此,将相对较小的值分解为简单的因子并将已经存在的素因子的度数n存储在例如字典中就足够了。

    因子总数的公式为:

    F = (P2+1)*(P3+1)*(P5+1)*(P7+1)*(P11+1)...*(Pq+1)
    

    其中Pk是素因数的次数k。

    例如5个!

     5! = 2^3 * 3 * 5
     Хранится  [3, 1, 1] или {2:3; 3:1; 5:1}
     F = 4 * 2 * 2 = 16
    

    6个!2 和 3 的幂加一,这样幂的列表(实际上是一本字典)就会像这样改变

     [4, 2, 1]) или  {2:4; 3:2; 5:1}
    

    答案将是

     F = 5 * 3 * 2 = 30   
    

    我认为这些信息足以解决

    求素数幂的一个例子:

    from collections import Counter
    def primes(n):
        res = Counter()
        d = 2
        while n > 1:
            m = 0   #степень множителя
            while n % d == 0:
                m += 1
                n //= d
            if m:
                res[d]  = m
            d += 2 if d > 2 else 1   #после двойки идём по нечётным
        return res
    
    print(primes(840))
    
    Counter({2: 3, 3: 1, 5: 1, 7: 1})
    

    让我再次提醒您,我们不是将这个函数应用于阶乘,而是应用于它的下一个因子,并且结果用于更新存储的素数幂。

    • 2
  2. Юрыч BRO
    2023-07-16T17:52:00Z2023-07-16T17:52:00Z

    尝试一下:

    from math import factorial
    n = factorial(int(input()))
    sqrt = n**.5
    ans = sqrt.is_integer()
    sqrt = int(sqrt)
    for i in range(2, sqrt):
        if n % i == 0:
            ans += 2
    print(ans)
    
    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5