这对我来说是一个相当困难的挑战,因为我是Python的新手。我该如何在基于以下序列函数的python中编写程序:
http://oeis.org/A063655
并执行以下操作:
它询问序列的值并返回相应的数字。例如,与序列的第10个值相对应的数字是7。我希望能够在价值超过30000000的情况下做到这一点。
所以,最终的产品看起来是这样的:
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))))
如果你想让你的计算机跟踪一个序列中超过30000000个元素,如果每个元素都是4字节的整数,你需要至少30000000*4字节,或者超过1.1GB的空间来存储所有值。我认为生成序列也需要很长时间,所以每次用户想要一个值时再次生成整个序列也不是很理想。我有点困惑,你到底是怎么想的。
从用户那里获取值很简单:您可以使用val = input("What is your value? ")
,其中val
是存储值的变量
编辑:
这似乎是一种快速而简单的方法,每个值都有合理的步骤数(除非值是素数……但让我们暂时保持概念简单(:你需要一个小于或等于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
,递减一,然后设置b = start_int
。类似于查找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语法指南。
如果有帮助的话,别忘了选择这个答案!
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
>