我正在研究
SPOJ
问题,
INTEST
. 目标是指定测试用例数(n)和除数(k),然后输入程序n个数字。程序将接受stdin新行中的每个数字,并且在接收到第n个数字后,将告诉您有多少数字可以被k整除。
这个问题的唯一挑战是让代码更快,因为
k
最多可以是10^7和
n
可高达10^9。
我试着用python编写它,但在加速时遇到了困难。有什么想法吗?
编辑2:我终于在10.54秒时通过了。我几乎用了你所有的答案,因此很难选择一个“正确的”,但我相信我选择的答案是最好的。谢谢大家。最终通过代码如下。
编辑:我在包含的代码中包含了一些建议的更新。
不允许使用扩展和第三方模块。该代码也由spoj judge机器运行,因此我没有更改解释程序的选择。
import sys
import psyco
psyco.full()
def main():
from sys import stdin, stdout
first_in = stdin.readline()
thing = first_in.split()
n = int(thing[0])
k = int(thing[1])
total = 0
list = stdin.readlines()
for item in list:
if int(item) % k == 0:
total += 1
stdout.write(str(total) + "\n")
if __name__ == "__main__":
main()