【问题标题】:Write a function that input a positive integer n and return the number of n-digit positive integers that divisible by 17编写一个函数,输入一个正整数 n 并返回能被 17 整除的 n 位正整数的个数
【发布时间】:2016-09-18 17:54:33
【问题描述】:

我正在研究 Sage。编写一个函数,输入一个正整数 n 并返回能被 17 整除的 n 位正整数的个数。一定要考虑 n=1 的情况。使用输入 n=1,2,5 测试您的程序。

我的理解是,比如我输入n=1,表示我需要检查0-9所有能被17整除的数。如果我输入n=2,表示我需要检查 0-99 之间的所有数字,包括可被 17 整除。

我不会想出一个通用公式来计算 n 的长度,然后取可被 17 整除的数字的正确范围。

def positive(n):
for n in range(0, 10**n):
    if (n%17==0):
        print n,

上面的代码对我有用,但它只是打印能被 17 整除的数字。我想知道如何计算它们,所以我会知道有多少数字能被 17 整除。

【问题讨论】:

  • 你不能用range(0, 10 ** n) 吗?

标签: python sage


【解决方案1】:

如何用数论来简化问题,并使用

def positive(n):
    return 10**n // 17 + 1

我相信 Sage 使用插入符号而不是双星号进行求幂,因此您可以改为使用

10^n // 17 + 1

加一包括值 0,当然可以被 17 整除。你可以用更长的版本检查一下,

def positive(n):
    return len([x for x in range(10**n) if x % 17 == 0])

【讨论】:

  • 最后一个示例中的 2 和 3 都需要方括号 - 否则它将是一个没有 len 的生成器表达式,因此失败......也 - 你需要return的值...
  • @JonClements:我在看到您的评论之前更正了return 问题,但感谢您对括号的澄清。我不使用 python 2.x。
  • 您可以将其重写为sum(1 for v in range(10 ** n) if v % 17 == 0),这样可以避免生成列表
  • @JonClements:再次感谢!我想知道如何在不将其转换为列表的情况下获得生成器的大小。您的回答非常巧妙地做到了这一点。我将保留我的答案并支持您的评论,以便人们更好地了解谁获得了该想法的功劳。
猜你喜欢
  • 1970-01-01
  • 2013-09-16
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多