Cod sursa(job #585357)

Utilizator drywaterLazar Vlad drywater Data 28 aprilie 2011 23:15:29
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
long long n,e,i,nr,j;
long long sum,p,d;
int t,pr[100000];
bool v[1000006];
int main(void)
{
    n=1000006;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d",&t);
    pr[++pr[0]]=2;
    for (i=3;i<=n;i+=2)
    {
        if (v[i]) continue;
        pr[++pr[0]]=i;
        for (j=i*i;j<=n;j+=i)
            v[j]=1;
    }
    while (t--)
    {
        scanf("%lld",&n);
        sum=1;
        nr=1;
        for (j=1;j<=pr[0];j++)
        {
            if (pr[j]*pr[j]>n) break;
            if (n%pr[j]) continue;
            i=pr[j];
            d=1;
            e=0;
            p=1;
            while (n%i==0)
            {
                n/=i;
                e++;
                p*=i;
                p%=9973;
                d+=p;
                if (d>=9973)
                d-=9973;
            }
            nr*=(e+1);
            sum=sum*d;
            sum%=9973;
        }
        if (n>1) {nr*=2; sum=(sum*(n+1))%9973;}
        printf("%lld %lld\n",nr,sum);
    }
    return 0;
}