我正在研究一个SPOJ问题,INTEST。目标是指定测试用例的数量(n)和除数(k),然后输入程序的n个数字。程序将接受stdin新行上的每个数字,在收到第n个数字后,将告诉您有多少可以被k整除
这个问题中唯一的挑战是让代码变得快速,因为k可以是10^7以内的任何内容,而n可以高达10^9。
我试着用Python编写它,但很难加快速度。有什么想法吗?
编辑2:我终于在10.54秒时通过了。我几乎用了你所有的答案,因此很难选择一个“正确的”,但我相信我选择的一个总结起来是最好的。谢谢你们。最终通过代码如下。
编辑:我在包含的代码中包含了一些建议的更新。
不允许扩展和第三方模块。代码也是由SPOJ判断机运行的,所以我没有更换解释程序的选项。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()