Cod sursa(job #1006635)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 7 octombrie 2013 15:12:48
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#define Mod 9973

using namespace std;
int p[100000],t;
long long n,s,b,i,j,nr,nrr,nre;
bool ok;
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d\n", &t);
    p[1]=2;
    nr=1;
    for(i=3; i<=99999; i+=2)
    {
        ok=true;
        for(j=1; j<=nr && p[j]*p[j]<=i; ++j )
            if(i%p[j]==0)
            {
                ok=false;
                break;
            }
        if(ok) p[++nr]=i;
    }

    for(i=1; i<=t; ++i)
    {
        scanf("%lld", &n);
        nre=1;
        s=1;
        for(j=1; j<=nr && n>1; ++j)
        {
            b=p[j];
            nrr=1;
            while(n%p[j]==0)
            {
                n/=p[j];
                b*=p[j]%Mod;
                ++nrr;
            }
            nre*=nrr;
            s=(s*(b-1)%Mod/(p[j]-1))%Mod;
        }
        if (n>1){
        nre*=2;
        s=((s*(n%Mod*n%Mod)%Mod-1)/(n-1))%Mod; }
        printf("%lld %lld\n", nre,s);
    }



    return 0;
}