Cod sursa(job #1258418)

Utilizator robertstrecheStreche Robert robertstreche Data 8 noiembrie 2014 20:45:13
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

#define nrmax 100000
#define inf 1000000

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

int t,n;

bool v[inf];

int prim[nrmax];

inline void ciur()
{
    int i,j,nr=0;

    for (i=2;i*i<=inf;i++)
     for (j=i*i;j<=inf;j+=i)
      v[j]=1;

    for (i=2;i<=inf;i++)
     if (v[i]==0)
      prim[++nr]=i;

    prim[nr+1]=inf+1000;
}

inline void solve()
{
    int suma=1,nrdiv=1;

    f>>n;
   if (v[n])
    {for (int i=1;prim[i]*prim[i]<=n;i++)
      {
          int putere=0,val=prim[i],nn=n;

          while (nn%prim[i]==0)
             {
                 nn/=prim[i];
                 putere++;
                 val*=prim[i];
             }

           nrdiv*=(putere+1);
           suma*=((val-1)/(prim[i-1]));
      }

    g<<nrdiv<<" "<<suma<<'\n';
    }
   else
    g<<2<<" "<<n+1<<'\n';
}

int main()
{
   f>>t;

   ciur();

   for (int i=1;i<=t;i++)
    solve();

   f.close();
   g.close();
}