Cod sursa(job #956870)

Utilizator heracleRadu Muntean heracle Data 3 iunie 2013 23:07:22
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

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

const int NR=1000000;

bool v[NR+1];
int p[152852],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()
{
    int n,x;
    ciur();
    in>>n;
    for(int i=1;i<=n;i++)
    {
        in>>x;
        int ndiv=1,sdiv=1;
        for(int k=1;p[k]*p[k]<=x;k++)
        {
            if(x%p[k]==0)
            {
                int a=1,t=1;
                while(x%p[k]==0)
                {
                    a++;
                    x/=p[k];
                    t*=p[k];
                }
                ndiv*=a;
                ndiv%=9973;
                sdiv*=((t*p[k]-1)/(p[k]-1));
                sdiv%=9973;
            }
        }
        if(x>1){
            ndiv*=2;
            sdiv*=(x*x-2)/(x-1);
        }


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

    }
    return 0;
}