Informatică, întrebare adresată de Istefan, 9 ani în urmă

Cerința
Fiind dat N, un număr natural nenul, calculați suma S=12+22+32+⋯+N2, modulo 10.234.573.

Date de intrare
Programul citește de la tastatură numărul N.

Date de ieșire
Programul va afișa pe ecran numărul S, modulo 10.234.573.

Restricții și precizări
1 ≤ N ≤ 2.000.000.000

Exemplu
Intrare

4
Ieșire

30
Explicație
S=12+22+32+42=30


Poblema mea este cu timpul de executie. Multumesc anticipat


AntiEaglesDavids: Asta e si ideea. Nu ai folosit modulo cum trebuie.
Istefan: ok...
AntiEaglesDavids: Foloseste-l la fiecare pas.
Istefan: int main()
{
long long n,i,p=0;
cin>>n;
for(i=1;i<=n;i++)
p=p+((i*i)%10234573);
cout<<p;
return 0; -------------------- pe aceasta iau 30 de punte....
AntiEaglesDavids: La fiecare element din fiecare pas. Apropo trebuie si la sfarsit daca nu ma insel.
AntiEaglesDavids: Daca nu stii proprietatile 'modulo' atunci lasa problema ca nu are rost
blindseeker90: Suma respectiva are deja o formula matematica: S=n(n+1)(n+2)/6 nu este nevoie sa folosesti un loop
AntiEaglesDavids: Nu mai spune?
artur99: Poti sa-mi dai si mie linkul la problema?
Istefan: http://www.pbinfo.ro/?pagina=probleme&id=1212

Răspunsuri la întrebare

Răspuns de AntiEaglesDavids
4
Metoda ineficienta (nu respecta limitele) dar care da raspuns corect. Sa te vad cum faci fara o structura repetitiva.


#include <iostream>
using namespace std;
const int MOD = 10234573;

int main()
{
    int n;
    long long p = 0;

    cin >> n;
    for(int i=1; i<=n; i++) {
        p = ( ( p % MOD ) + ( (long long)( i % MOD ) * ( i % MOD )  % MOD ) ) % MOD;
    }
    cout << p << '\n';
}



artur99: http://prntscr.com/7qz14l :)))
artur99: GATAAA :D
artur99: Am facut-o cu 100 :D
artur99: un cod de 9.20KB :)))
artur99: http://prntscr.com/7qze99
artur99: http://pastebin.com/XtzGPssW
artur99: :P
Istefan: Multumesc
artur99: cp :)
artur99: Prima parte sunt niste functii luate de pe net pt lucru cu numere mari(>50 cifre)...
Alte întrebări interesante