Saya menanyakan pertanyaan ini pada StackOverflow , tapi saya pikir di sini adalah tempat yang lebih tepat.
Ini adalah masalah dari kursus Pengantar algoritma :
Anda memiliki array dengan bilangan bulat positif (array tidak perlu diurutkan atau elemen unik). Sarankan algoritma untuk menemukan jumlah elemen terbesar yang dapat dibagi oleh .
Contoh: . Jawabannya adalah 56 (dengan elemen 6 , 13 , 4 , 8 , 25 )
Ini relatif mudah untuk menemukannya di menggunakan pemrograman dinamis dan menyimpan jumlah terbesar dengan sisa .
Juga, jika kita membatasi perhatian pada urutan elemen yang berdekatan, mudah untuk menemukan urutan yang optimal dalam waktu , dengan menyimpan jumlah parsial modulo : misalkan , untuk setiap sisa ingat indeks terbesar sehingga , dan kemudian untuk setiap Anda menganggap manaadalah indeks yang sesuai dengan .
Tetapi apakah ada solusi -waktu untuk kasus umum? Setiap saran akan dihargai! Saya menganggap ini ada hubungannya dengan aljabar linier tapi saya tidak yakin apa tepatnya.
Atau, dapatkah ini dilakukan dalam waktu ?