Я работаю над проблемой SPOJ, INTEST. Цель состоит в том, чтобы указать количество тестовых случаев (n) и делителя (k), а затем подать ваши n номера программ. Программа будет принимать каждое число в новой строке stdin и после получения n-го числа сообщит вам, сколько из них было делимым на k.
Единственная проблема в этой проблеме - заставить ваш код быть FAST, потому что 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()