Cod sursa(job #2001477)

Utilizator VarticeanNicolae Varticean Varticean Data 16 iulie 2017 20:19:35
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <iostream>
#define ll long long
#define M 1000009
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
ll prim[M],k;
ll pow(ll x,ll n)
{
    ll p=1;
    for(int i=1; i<=n; i++)
        p*=x;
    return p;
}
void ciur()
{
 bool a[M];
 for( int i=2; i<=M; i++)
      a[i]=1;
     for(int i=2; i<=M; i++)
        {
        if(a[i])
        for(int j=2*i; j<=M; j+=i )
          a[j]=0;
          if( i*i>M ) break;
        }

     for(int i=2; i<=M; i++)
        if(a[i]) prim[++k]=i;
}
int main()
{
    ciur();
    ll n,x;
    in>>n;
    for(;n;n--)
    {
        ll sum=1, nr=1, i=1;
        in>>x;
        while(x>1)
        {
            ll exp=0;
            if(x%prim[i]==0)
            {
               while(x%prim[i]==0 )
                {
                 exp++;
                 x/=prim[i];
                }
              nr*=(exp+1);
              sum*=(pow(prim[i],exp+1)-1)/(prim[i]-1);
            }
            i++;
        }
        out<<nr<<' '<<sum<<'\n';
    }


    return 0;
}