Cod sursa(job #2246009)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 26 septembrie 2018 13:53:18
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>

using namespace std;
const long long prim=9973;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");

int t;
long long n,suma=1,nr=1;


long long ridLog(long long b,long long p)
{
    long long r=1;

    for(long long i=1;i<=(1LL<<60);i*=2)
    {
      if(i&p)
            r*=b;
      b*=b;

    }

    return r;
}

long long formula(long long b,long long p)
{

 return (ridLog(b,p+1)-1)/(b-1);

}


int main()
{
    fi>>t;

    for(int i=1;i<=t;i++)
    {
        fi>>n;
        long long d=2,putere=0;
        suma=1;
        nr=1;
        long long cop=n;
        while(n>1 && d*d<=cop)
        {

            if(n%d==0)
            {
                putere++;
                n/=d;
            }
            else
            {
                if(putere)
                {
                    suma*=formula(d,putere);
                    nr*=(putere+1);
                    suma%=prim;
                    nr%=prim;
                }

                putere=0;
                d++;
            }
        }
        if(putere)
        {
            suma*=formula(d,putere);
            nr*=(putere+1);
        }
        if(n>1)
        {
            nr*=2;
            suma*=formula(n,1);
        }
        suma%=prim;
        nr%=prim;
        fo<<nr<<" "<<suma<<endl;

    }
    return 0;
}