【发布时间】:2015-08-12 19:09:51
【问题描述】:
我正在编写一个代码,它将计算下面函数g(x) 中关于自然数的间隙,然后对它们求和。
from math import *
a = set()
n = eval(input("n = "))
def g(x):
return floor(x*log10(x)) # thanks to tzaman
b = 1
while g(b) < n:
a.add(g(b))
b+=1
aprime = set(range(max(a)))
z = max(a)
print(z*(z+1)/2-sum(a)) # thanks to tzaman
input("Done!")
我试图拥有n = 10 ** 10,即10000000000,并在合理的时间内(例如,
示例 I/O
n = 12, output = 15
其他信息
下图比较了x 和g(x):
x | 1 2 3 4 5 6 7 8 9 10 11 12
g(x) | 0 0 1 2 3 4 5 7 8 10 11 12
集合x \ g(x)代表x中的成员而不是g(x)中的成员,对于12以下的数字,{0,6,9};这些总和是 15。所以,当n = 12,output = 15。
【问题讨论】:
-
请解释问题所在,这样我们就不必推断您的代码试图做什么。
-
如果
len(a)比len(aprime)小得多,在这种情况下,您应该只计算sum(a)并从sum(aprime)的封闭形式中减去:@987654339 @ -
@JuanLopes
I'm writing a code that will count the gaps in the function g(x) below... However, this code performs ludicrously long...我相信我已经清楚地表达了我的问题;差距的定义不明确吗? -
这是一个编程问题的网站,所以如果您的代码与其他主题相关,我们可能无法立即理解。如果有不清楚的地方,最好给出示例输入和输出:)
-
另外,我希望
g(x)只是这里的一个例子——如果这实际上是您正在使用的函数,那么将其转换为g(x) = floor(x*log10(x))对于大型x会快很多.
标签: python algorithm function python-3.x