Cod sursa(job #720647)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 22 martie 2012 20:03:17
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<cstdio>
#define NMax 1000000
#define modulo 9973
using namespace std;

long long pr[200005];
int ka;
char bif[NMax+5];

void ciur ()
{
    int i,j;
    for (i=2; i<=NMax; i++)
        if (!bif[i])
        {
            pr[++ka]=(long long)(i);
            for (j=i+i; j<=NMax; j+=i)
                bif[j]=1;
        }
}

long long pow (long long a, long long x)
{
    if (x==0)
        return 1;
    if (x==1)
        return a;
    if (x%2)
        return (a*pow(a,x-1))%modulo;
    long long y=pow(a,x/2);
    return (y*y)%modulo;
}

int main ()
{
    int t,i,j;
    long long n,aux,nr,sum,exp;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    ciur();
    scanf("%d",&t);
    for (i=1; i<=t; i++)
    {
        scanf("%lld",&n);
        nr=1; sum=1;
        for (j=1; pr[j]*pr[j]<=n; j++)
            if (n%pr[j]==0)
            {
                aux=1; exp=0;
                while (n%pr[j]==0)
                {
                    exp++;
                    aux*=pr[j];
                    n/=pr[j];
                }
                aux*=pr[j];
                nr*=(exp+1);
                sum*=(((aux-1)%modulo)*pow(pr[j]-1,modulo-2))%modulo;
            }
        if (n!=1)
        {
            nr*=2;
            sum*=(((n*n-1)%modulo)*pow(n-1,modulo-2))%modulo;
        }
        printf("%lld %lld\n",nr,sum);
    }
    return 0;
}