Cod sursa(job #1258423)

Utilizator robertstrecheStreche Robert robertstreche Data 8 noiembrie 2014 20:52:06
Problema Suma si numarul divizorilor Scor 10
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]<=n;i++)
        {
          int putere=0,val=prim[i];

          while (n%prim[i]==0)
             {
                 n/=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();
}