Cod sursa(job #1379705)

Utilizator Alex1199Alex Bercea Alex1199 Data 6 martie 2015 19:04:42
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int64_t n, t, S=1, N, prim[100001],m=1, nr=1;;
bool a[1000001];
void ciur()
{   prim[1]=2;
   for(int i=3;i*i<=1000000;i++)
        for(int j=i*i;j<=1000000;j=j+2*i)
          a[j]=true;
   for(int i=3;i<=1000000;i+=2)
        if(!a[i]) m++,prim[m]=i;
}
int64_t lgput(int d, int c)
{
    if (c==1) return d;
    else
        if (!(c%2)) return (lgput(d*d,c/2));
           else return (d*lgput(d*d,(c-1)/2));
}
int main()
{
    f>>t;
   ciur();
    for(int u=1;u<=t;u++)
    {
        f>>n;
        int w=(int)(n); int p=0; nr=S=1;
        while (n>1)
        {
            while(!(n%prim[w]))
               {  p++;
                  n/=prim[w];
               }
            if(p) {nr*=(p+1);  S*=(lgput(prim[w],p+1)-1)/(prim[w]-1); p=0;}
            else w--;
        }
        g<<nr<<' '<<S%9973<<'\n';
    }

    return 0;
}