Răspuns :
Am presupus ca nu stii cat e acel N. Daca stii, foloseste citeste-l si inlocuieste "while (fin >> n)" cu "for (int i = 0; i < N; ++i)"
Am incercat sa-l optimizez, dar si sa fie usor de inteles.
#include <iostream>
#include <fstream>
using namespace std;
bool is_prime(int number)
{
if (number <= 1)
return false;
if (number == 2)
return true;
if (number % 2 == 0)
return false;
int divisor = 3;
while (divisor * divisor <= number)
{
if (number % divisor == 0)
return false;
divisor += 2;
}
return true;
}
int main()
{
ifstream fin("DATE.IN");
ofstream fout("DATE.OUT");
int numar;
while (fin >> numar)
{
int suma = 0;
if (is_prime(numar))
fout << numar << " nu este perfect";
else if (numar % 2 == 0)
{
int divizor = 2;
while (divizor * divizor < numar)
{
if (numar % divizor == 0)
suma = suma + divizor + (numar / divizor);
++divizor;
}
if (divizor * divizor == numar)
suma += divizor;
fout << numar << " " << suma;
}
else
{
int divizor = 3;
if (numar == 1)
suma = 1;
else
{
while (divizor * divizor < numar)
{
if (numar % divizor == 0)
suma = suma + divizor + (numar / divizor);
divizor += 2;
}
if (divizor * divizor == numar)
suma += divizor;
}
fout << numar << " " << suma;
}
fout << endl;
}
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.