Informatică, întrebare adresată de togoeradu, 8 ani în urmă

Salut tuturor! La problema #1212 cu numele de de SumaPatrate, primesc numai 50 de puncte. As avea nevoie sa stiu ce trebuie sa schimb la el, sau poate imi puteti da chiar voi unul. Algoritmul meu este urmatorul:
#include

using namespace std;

int main()
{
long long int N,S;
cin>>N;

S=(N*(N+1)*(2*N+1))/6;
cout< }


boiustef: iai depăşire de tip.... numărul S depăşeşte long long
boiustef: pentru a micşora valoarea lui S în problemă se scrie despre modulo 10234573, nu ai aplicat asta?
boiustef: Formula e corectă, dar încearcă să siplifici prin 2 şi 3 acei trei factori
boiustef: După simplificare , lui s îi dai produsul dintreia modulo de la fiecare factor şi modulo de la produsul rezultatelor lor,
boiustef: dacă nu se primeşte dai de ştire... pot plasa codul meu
togoeradu: ok, voi incerca, si i-am dat modulo lui S in cout
togoeradu: mai bine plasezi codul tau..
boiustef: ok

Răspunsuri la întrebare

Răspuns de boiustef
0

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   unsigned long long int N, S,f1,f2,f3;

   cin >> N;

   f1=N; f2=N+1; f3=2*N+1;

   if (f1%2==0) f1= f1/2;

   else f2 = f2 / 2;

   if (f1%3==0) f1 = f1 / 3;

   else if (f2%3==0) f2 = f2 / 3;

        else f3 = f3 / 3;

   S = ( ((f1*f2)% 10234573)*f3 ) % 10234573;

   cout << S;

   return 0;

}

Explicație:

Alte întrebări interesante