Cod sursa(job #1757086)

Utilizator papinub2Papa Valentin papinub2 Data 14 septembrie 2016 14:50:29
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");

int prim(int x)
{
    int i;
    if (x<2) return false;
    if (x==2) return true;
    if (x%2==0) return false;
    for (i=3; i*i<=x; i=i+2)
        if (x%i==0) return false;
    return true;
}

int suma_div(int x)
{
    int d=2, k=0, nrdiv=1, S=1, y;

    if (prim(x))
    {
        return x+1;
    }

    while (x!=1)
    {
        x=x/d;
        k++;
        y=k+1;
        if (x%d!=0)
        {
            S=S*(pow(d, y)-1)/(d-1);
            nrdiv=nrdiv*y;
            if (d==2) d++;
            else
                d=d+2;
                k=0;
        }
    }

    return S;
}

int nr_div(int x)
{
    if (prim(x)) return 2;
     int d=2, k=0, nrdiv=1, S=1;
      while (x!=1)
    {
        x=x/d;
        k++;
        if (x%d!=0)
        {
            nrdiv=nrdiv*(k+1);
            if (d==2) d++;
            else
                d=d+2;
                k=0;
        }
    }
return nrdiv;
}

int main()
{
  int n, x, i;
  in>>n;
  for (i=1; i<=n; i++)
  {
      in>>x;
      out<<nr_div(x)<<' '<<suma_div(x)<<'\n';
  }
  return 0;
}