Cod sursa(job #1386070)

Utilizator Alex1199Alex Bercea Alex1199 Data 12 martie 2015 17:51:12
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int64_t n, t, S, N, prim[100001],m=1, nr=1, sum=1;
bool a[1000001];
int64_t sqr(int y){return y*y;}
void ciur()
{
   for(int i=3;i*i<=1000000;i++)
        for(int j=i*i;j<=1000000;j=j+2*i)
          a[j]=true;
   prim[1]=2;
   for(int i=3;i<=1000000;i+=2)
        if(!a[i]) m++,prim[m]=i;
}
int64_t lgput(int64_t x, int64_t a)
{
    if(a==1) return x;
    if(!(a%2)) return sqr(lgput(x,a/2));
      else return x*lgput(x,a-1);
}
int main()
{
    f>>t;
    ciur();
  for(int i=1;i<=t;i++)
  {
    f>>n; int index=n; int pt=0; nr=sum=1;
   while (n!=1)
   {
       while (!(n%prim[index]))
       {
           pt++; n/=prim[index];
       }
    if(pt) nr*=(pt+1), sum*=(lgput(prim[index],pt+1)-1)/(prim[index]-1);
    pt=0; index--;
   }
  g<<nr<<' '<<sum<<'\n';
  }
    return 0;
}