这对我来说是一个相当困难的挑战,因为我是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))))发布于 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语句返回值。
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语法指南。
如果有帮助,别忘了选择这个答案!
发布于 2016-08-27 12:45:15
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
> https://stackoverflow.com/questions/15735041
复制相似问题