Cod sursa(job #694335)

Utilizator crazzytudTudor Popa crazzytud Data 27 februarie 2012 19:55:58
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
using namespace std;

const int Z = 9973;
const int C = 1005100;

int ci[C+2],v[C];
int inv[Z+2];
long long nr,s;

int u;

void ciur()
{
    int i,j;
    ci[1]=true;
    for(i=2;i*i<C;i++)
        if(!ci[i])
            for(j=i*i;j<C;j+=i)
               ci[j]=true;
    for(i=1;i<C;i++)
        if(!ci[i])
            v[++u]=i;

}


void desc(long long n)
{
    nr=s=1;
    long long p;
    int i,ct;
    for(i=1;(long long)v[i]*v[i]<=n;i++)
    {
        if(n%v[i]!=0)
            continue;

        p=v[i];
        ct=1;

        while(n%v[i]==0)
        {
            ct++;
            p=p*v[i];
            n/=v[i];
        }

        nr*=ct;
        s = s*(p-1)/(v[i]-1);
        //s=(s*minus1(p,1)%Z*inv[minus1(v[i],1)])%Z;

    }
    if(n!=1)
    {
        nr*=2;
        s=s*(n+1);
    }
}




ifstream in("ssnd.in");
ofstream out("ssnd.out");
int main()
{
    //freopen("ssnd.in","r",stdin);
    //freopen("ssnd.out","w",stdout);
    int i,x,y,d,t;
    long long n;
    ciur();
    in>>t;
    for(i=1;i<=t;i++)
    {
        //s=1;
        in>>n;
        desc(n);
        out<<nr%Z<<" "<<s%Z<<"\n";
    }
    return 0;
}