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ăspunsuri la întrebare
#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;
}
}