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 pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări suplimentare sau nevoie de ajutor, vă rugăm să ne contactați cu încredere. Așteptăm cu drag să reveniți și nu uitați să ne salvați în lista dumneavoastră de favorite!