👤

URGENT!!! 45 DE PUNCTE!!

Se citesc din FIS.IN numere naturale nenule. Sa se afiseze in FIS.OUT, pe linii separate, fiecare numar citit, urmat de media aritmetica a divizorilor proprii / respectiv mesajul "FARA div prop".


Răspuns :

#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;

 int numar_divizori = 0;

 if (is_prime(numar))

  fout << numar << " FARA div prop";

 else if (numar % 2 == 0)

 {

  int divizor = 2;

  while (divizor * divizor < numar)

  {

   if (numar % divizor == 0)

   {

    suma = suma + divizor + (numar / divizor);

    numar_divizori += 2;

   }

   ++divizor;

  }

  if (divizor * divizor == numar)

  {

   suma += divizor;

   ++numar_divizori;

  }

  fout << numar << " " << (float) suma / numar_divizori;

 }

 else

 {

  int divizor = 3;

  if (numar == 1)

   suma = 1;

  else

  {

   while (divizor * divizor < numar)

   {

    if (numar % divizor == 0)

    {

     suma = suma + divizor + (numar / divizor);

     numar_divizori += 2;

    }

    divizor += 2;

   }

   if (divizor * divizor == numar)

   {

    suma += divizor;

    ++numar_divizori;

   }

   fout << numar << " " << (float) suma / numar_divizori;

  }

 }

 fout << endl;

}

}