0

这对我来说是一个相当困难的挑战,因为我是 Python 新手。我将如何根据这个序列函数在 python 中编写程序:

http://oeis.org/A063655

并执行以下操作:

它询问序列的值并返回相应的数字。例如,对应于序列的第 10 个值的数字是 7。我希望能够对超过 300,000,000 的值执行此操作。

因此,最终产品将如下所示:

Enter a value: 4
[7]

任何想法从哪里开始?我有一个框架来生成序列,其中 (x) 将放置一个数学方程或数字,但我不确定如何从这里开始或如何实现“输入值”部分:

import math

def my_deltas():
    while True:
        yield (x)
        yield (x)
def numbers(start, deltas, max):
    i=start
    while i<=max:
        yield i
        i+=next(deltas)
print(','.join(str(i) for i in numbers((x), my_deltas(),(x))))
4

2 回答 2

1

如果您想让您的计算机跟踪序列中超过 300,000,000 个元素,如果每个元素都是 4 字节整数,那么您将需要至少 300,000,000 * 4 字节或超过 1.1GB 的空间来存储所有值。我假设生成序列也需要很长时间,因此每次用户想要一个值时再次生成整个序列也不是最优的。我对您如何尝试准确解决此问题感到有些困惑。

从用户那里获取一个值很简单:你可以使用val = input("What is your value? ")whereval是你存储它的变量。

编辑:

这种方式似乎是一种快速而简单的方法,每个值都有合理数量的步骤(除非该值是素数......但现在让这个概念保持简单):您需要小于或的整数等于 n ( start_int = n ** .5) 的平方根,然后从那里测试下面的每个整数,看看它是否除以 n,首先转换start_int为一个整数start_int = int(start_int)(它给你 start_int 的下限),像这样:while (n % start_int) != 0: start_int = start_int - 1,减一,然后然后设置b = start_int。类似于 find 的东西d,但你必须弄清楚那部分。请注意,这%是模运算符(如果您不知道那是什么,可以阅读它,谷歌:'modulus python'),并且**是求幂。然后,您可以使用return陈述。您的函数看起来像这样(以#注释开头的行,python 跳过它们):

def find_number(value):
    #using value instead of n
    start_int = value ** .5
    start_int = int(start_int)
    while (n % start_int) != 0:
      #same thing as start_int = start_int - 1
      start_int -= 1
    b = start_int

    #...more code here

    semiperimeter = b + d
    return semiperimeter

#Let's use this function now!

#store
my_val = input("Enter a value: ")

my_number = find_number(my_val)

print my_number

有很多 Python 入门指南,我建议您在解决此类问题之前先阅读其中的指南。如果您已经知道如何使用另一种语言进行编程,您可以浏览 Python 语法指南。

如果有帮助,请不要忘记选择此答案!

于 2013-03-31T23:10:59.737 回答
0
from math import sqrt, floor

def A063655(n):
    for i in range(floor(sqrt(n)), 0, -1):
        j = floor(n / i)
        if i * j == n:
            return i + j

if __name__ == '__main__':

    my_value = int(input("Enter a value: "))

    my_number = A063655(my_value)

    print(my_number)

用法

> python3 test.py
Enter a value: 10
7
> python3 test.py
Enter a value: 350000
1185
> 
于 2016-08-27T04:45:15.490 回答