我正在解决一个 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()