Cod sursa(job #1017933)

Utilizator CatalinaRaduCatalina Elena Radu CatalinaRadu Data 28 octombrie 2013 17:28:45
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
long v[1000001];

void initializare()
{
    long nrdiv,sdiv;
    nrdiv=1;
    sdiv=1;
}

void ciur()
{
    bool pr[1000001];
    long i,j ,nr=0;
    long lim=1000000;
    for (i=2;i<=lim;i++)
        pr[i]=0;
    for (i=2;i<=sqrt(lim);i++)
        if (pr[i])
          for(j=i;j<=lim/i;j++)
            pr[i*j]=0;
    for (i=2;i<=lim;i++)
        if (pr[i])
        v[nr++]=i;


}
long long putere (long x, long y)
{
    long i;
    long long p;
    for (i=1;i<=y;i++)
        p=p*x;
    return p;
}
 void desc (long long n)
 {
    long i=1,j,nrdiv,sdiv,s;
    long d[1000000],p[1000000];
    long nr=0,aux=n;
    for (j=1;j<=1000000;j++)
        d[j]=0;
    nrdiv=1;sdiv=1;
    while (aux!=1)
     {

      if (aux%v[i]==0)
        {
        p[nr++]=v[i];
        while (aux%v[i]==0)
        {aux=aux/v[i];d[nr]++;}}
    i++;}
    for (i=1;i<=nr;i++)
        {nrdiv=nrdiv*(d[i]+1);
        s=(putere (p[i],d[i]+1)-1)/(p[i]-1);
        sdiv= sdiv*s;

 }}

int main()
{
    int t,i; long n;
    long nrdiv,sdiv;

    cin>>t;
    for (i=1;i<=t;i++)
    {
        cin>>n;
        initializare();
        desc(n);
        cout<<nrdiv<<" "<<sdiv%1993<<endl;
    }
    f.close();g.close();
    return 0;
}