Ich denke, Vatine Antwort ist wahrscheinlich der Weg zu gehen, aber ich tippte bereits dies und es kann nützlich sein, für dieses oder für jemand anderes ähnliche Problem.
Ich habe heute Morgen keine Zeit für eine detaillierte Antwort, aber denke darüber nach. 1^2 + 2^2 + 3^2 + ... + n^2
würde O (n) Schritte, um direkt zu berechnen. Es entspricht jedoch (n(n+1)(2n+1)/6)
, die in O (1) Zeit berechnet werden kann. Eine ähnliche Äquivalenz existiert für jede höhere integrale Leistung x.
Es mag eine allgemeine Lösung für solche Probleme geben; Ich kenne keinen, und Wolfram Alpha scheint auch keinen zu kennen. Jedoch in allgemein der äquivalente Ausdruck ist Grad x + 1, und kann heraus bearbeitet werden, indem einige Beispielwerte berechnet werden und ein Satz linearer Gleichungen für die Koeffizienten gelöst wird.
Dies wäre jedoch schwierig für große x, wie 1000 als in Ihrem Problem, und wahrscheinlich nicht innerhalb von 2 Sekunden getan werden konnte.
Vielleicht kann jemand, der mehr Mathematik als ich weiß, dies in eine praktikable Lösung verwandeln?
Edit: Whoops, ich sehe Fabian Pijcke hatte bereits einen nützlichen Link über Faulhaber's formula gepostet, bevor ich gepostet habe.
@ TobySpeight Nein, es ist definitiv anders. 1^x, 2^x ..., n^x ist mod exponentiell, und ich möchte SCHNELLER ALGORITHMUS finden, weil n <= 10^16 und mod = 10^9 + 7. – square1001
n^x mod m ist das gleiche wie ((n^(x-1) mod m) * (n mod m)) mod m; (a + b) mod m ist das gleiche wie ((a mod m) + (b mod m)) mod m. – Vatine
@TobySpeight In meinem langsamen Algorithmus muss ich mod etwa 10^10 mal nehmen. Aber es ist sehr langsam, weil das Zeitlimit 2 Sekunden beträgt. Ich möchte nur schnellen Algorithmus finden. – square1001