Cod sursa(job #912634)

Utilizator ucnahHancu Andrei ucnah Data 12 martie 2013 17:20:46
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 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;
    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*=((prim[i]-1)%MOD);
            sd=sus/jos;
        }
        if(n>1)
        {
            nd*=2;
            sd=(sd*(n+1))%MOD;
        }
        printf("%d %d\n",nd,sd);
    }
    return 0;

}