Pagini recente » Cod sursa (job #1124092) | Istoria paginii utilizator/abu_cita | Cod sursa (job #1582230) | Cod sursa (job #345031) | Cod sursa (job #2102387)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("divizori.in");
ofstream out("divizori.out");
char c;
int nrdiv(int a)
{
int d = 2, f, nr = 1;
while (a != 1)
{
if (a % d == 0)
{
f = 0;
while (a % d == 0)
{
++f;
a /= d;
}
nr *= f + 1;
}
if (d <= (int) sqrt(a))
{
if (d == 2)
++d;
else
d += 2;
}
else
d = a;
}
return nr;
}
int nrc(int a)
{
int nr = 0;
while (a > 0)
{
++nr;
a /= 10;
}
return nr;
}
int main()
{
long long numar = 0;
int i, j = 0, n, k, x, nr, a = 0, MAX = 0, nrmax;
bool ok = 1;
in >> n >> k;
for (i = 1; i <= n; ++i)
{
in >> c;
if (j == 0)
{
numar = numar * 10 + (c - '0');
++j;
}
else
{
if (j != k - 1)
{
numar = numar * 10 + (c - '0');
++j;
}
else
{
numar = numar * 10 + (c - '0');
x = nrdiv(numar);
nr = nrc(x);
if (x > MAX)
{
MAX = x;
nrmax = numar;
}
else if (x == MAX)
{
if (numar < nrmax)
nrmax = numar;
}
numar = x;
j = nr;
++a;
}
}
}
if (nrc(numar) < k)
{
while (numar != nrdiv(numar))
{
++a;
numar = nrdiv(numar);
if (nrdiv(numar) > MAX)
{
nrmax = numar;
MAX = nrdiv(numar);
}
else if (nrdiv(numar) == MAX)
{
if (numar < nrmax)
nrmax = numar;
}
}
++a;
}
out << a << '\n' << MAX << '\n' << nrmax;
return 0;
}