Учитывая массив A целых чисел размера N, я хочу вычислить
Это было проблемой в прошлом конкурсе между колледжами. Нам пришлось написать программу, которая разрешила бы до 5 экземпляров этой проблемы, с N & le; 200 000 и каждый a i ≤ 200 000, в течение 20 секунд, лимит времени. Ясно, что решение O (N 2) будет проходить через время. Согласно редакция, предполагаемое решение включало полиномиальное умножение с использованием быстрого преобразования Фурье. Я ищу альтернативные алгоритмы, которые решат это быстрее, чем наивный алгоритм O (N 2) без FFT (или NTT). Существуют ли простые и элегантные решения этой проблемы?
Известные факты:
mod может быть "распределен" внутри продукта, потому что (x * y)% m = ((x% m) * (y% m))% m
Обновление: вот файл тестового файла ввода/вывода во время конкурса: если он пройдет через 20 секунд, он будет принят. Вход: https://www.dropbox.com/s/nw81hts9rniter5/algol.in?dl=0 Выход: https://www.dropbox.com/s/kpa7wit35xr4xm4/algol.out?dl=0