Cod sursa(job #956908)

Utilizator heracleRadu Muntean heracle Data 4 iunie 2013 00:30:45
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;

ifstream in ("ssnd.in");
ofstream out ("ssnd.out");

const int NR=1000006;

bool v[NR+1];
int p[500000],nr;

void ciur()
{
    for(int i=2;i*i<=1000;i++)
    {
        if(v[i]==0)
            for(int k=i*i;k<=NR;k+=i)
                v[k]=1;

    }

     nr=1;

    for(int i=2;i<=NR;i++)
    {
        if(v[i]==0)
            {

                p[nr]=i;
                nr++;
            }
    }
}


int main()
{
    long long n,x;
    long long ndiv=1,sdiv=1,k;
    ciur();
    in>>n;
    for(int i=1;i<=n;i++)
    {
        in>>x;
        ndiv=1;
        sdiv=1;
        for( k=1;p[k]*p[k]<=x;k++)
        {

            if(x%p[k]==0)
            {
                long long a=1,t=p[k];
                while(x%p[k]==0)
                {
                    a++;
                    x/=p[k];
                    t*=p[k];
                }
                ndiv*=a;
                sdiv*=((t-1)/(p[k]-1));
                sdiv%=9973;

            }
        }
        if(x!=1){
            ndiv*=2;
            sdiv*=(x*x-1)/(x-1);
        }


        out<<ndiv<<" ";;
        out<<sdiv%9973<<"\n";

    }
    return 0;
}