Cod sursa(job #913253)

Utilizator ucnahHancu Andrei ucnah Data 13 martie 2013 10:50:02
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <algorithm>
#include <cmath>
#define MAX 1000005
#define MOD 9973
using namespace std;
int t,n,nr=1,nd,sd;
int prim[MAX];
bool viz[MAX];
void ciur()
{
    for(int i=2;i<MAX;i++)
    {
        if(viz[i]==0)
            prim[nr++]=i;
        for(int j=i+i;j<MAX;j+=i)
            viz[j]=1;
    }
}
int pow(int x,int y)
{
    int p=1;
    for(int i=1;i<=y;i++)
    {
        p*=x;
        p%=MOD;
    }
    return p;
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d",&t);
    ciur();
    for(int i=0;i<t;i++)
    {
        scanf("%d",&n);
        int aux=n;
        nd=1;
        sd=1;
        int sus=1,jos=1;
        for(int i=1;i<=nr && prim[i]*prim[i]<=aux;i++)
        {
            int y=0;
            while(n%prim[i]==0)
            {
                n/=prim[i];
                y++;
            }
                nd*=(y+1);
                sus=((pow(prim[i],y+1)-1)%MOD);
                jos=(pow(prim[i]-1,MOD-2)%MOD);
                sd=(((sd*sus)%MOD)*jos)%MOD;
        }
        if(n>1)
        {
            nd*=2;
            sd=(sd*(n+1))%MOD;
        }
        printf("%d %d\n",nd,sd);
    }
    return 0;

}