首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中为OEIS序列生成并输入值?

在Python中为OEIS序列生成并输入值?
EN

Stack Overflow用户
提问于 2013-04-01 05:59:13
回答 2查看 497关注 0票数 0

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

http://oeis.org/A063655

并执行以下操作:

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

所以,最终的产品应该是这样的:

代码语言:javascript
复制
Enter a value: 4
[7]

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

代码语言:javascript
复制
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))))
EN

回答 2

Stack Overflow用户

发布于 2013-04-01 07:11:00

如果你想让你的计算机跟踪一个序列中超过300,000,000个元素,如果每个元素都是一个4字节的整数,那么你至少需要300,000,000 *4字节,或者超过1.1 or的空间来存储所有的值。我假设生成序列也会花费很长的时间,所以每次用户想要一个值时,再次生成整个序列也不是很理想。我有点困惑,你到底是如何处理这个问题的。

编辑:

似乎有一种快速而简单的方法是这样的,为每个值设置合理的步数(除非值是prime...but,否则现在让概念保持简单):您需要小于或等于n (start_int = n ** .5)的平方根的整数,然后从那里测试下面的每个整数,看看它是否除以n,首先使用start_int = int(start_int)start_int转换为整数(这就是start_int的底数),例如:while (n % start_int) != 0: start_int = start_int - 1,减1,然后设置b = start_int。类似于查找d的内容,但您必须弄清楚这一部分。注意,%是模运算符(如果你不知道它是什么,你可以在google上阅读:'modulus‘),而**是指数。然后,可以使用return语句返回值。

代码语言:javascript
复制
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语法指南。

如果有帮助,别忘了选择这个答案!

票数 1
EN

Stack Overflow用户

发布于 2016-08-27 12:45:15

代码语言:javascript
复制
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)

使用

代码语言:javascript
复制
> python3 test.py
Enter a value: 10
7
> python3 test.py
Enter a value: 350000
1185
> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15735041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档