Cod sursa(job #1637591)

Utilizator RaduToporanRadu Toporan RaduToporan Data 7 martie 2016 18:11:14
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>

int i,j,v[100005],k,t,val,nrd,p,ka;
long long n,init,suma,exp;
bool a[1000005];

int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    a[1]=1;
    for (i=1; i*i<=1000000; i++)
        if (a[i]==0)
            for (j=i; j<=1000000/i; j++)
            a[i*j]=1;
    for (i=1; i<=1000000; i++)
        if (a[i]==0) v[++k]=i;
    scanf("%d",&t);
    for (val=1; val<=t; val++)
    {
        scanf("%lld",&n);
        init=n;
        i=1;
        suma=1;
        nrd=1;
        while (n!=1 && 1ll*v[i]*v[i]<=init)
        {
            p=0;
            if (n%(1ll*v[i])==0)
            {
                p=0;
                while (n%(1ll*v[i])==0)
                {
                    n=n/v[i];
                    p++;
                }
                nrd=nrd*(p+1);
            }
            exp=1;
            for (ka=1; ka<=p+1; ka++) exp=exp*v[i];
            suma=suma*((exp-1)/(v[i]-1))%9973;
            i++;
        }
        if (n!=1)
            {
                nrd=nrd*2;
                suma=suma*((n*n-1)/(n-1))%9973;
            }
        printf("%d %lld\n",nrd,suma);
    }
    return 0;
}