Cod sursa(job #1121320)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 25 februarie 2014 12:28:27
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>

using namespace std;
long long i,np,p[1000002],t;
long long P[100000],n,sd,nd,term,sum,cnt;
void ciur();
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    ciur();
    scanf("%lld",&t);
    for(;t;t--)
    {
        sd=1;nd=1;
        scanf("%lld",&n);
        for(i=1;i<=np&&P[i]*P[i]<=n;i++)
            if(n%P[i]==0)
            {
                sum=1;cnt=1;term=1;
                while(n%P[i]==0)
                {
                    cnt++;
                    term*=P[i];
                    sum+=term;
                    n/=P[i];
                }
                sd=(sd*sum)%9973;
                nd*=cnt;
            }
        if(n>1){sd=sd*(1+n)%9973;nd*=2;}
        printf("%lld %lld\n",nd,sd);
    }
    return 0;
}
void ciur()
{
    P[1]=2;np=1;
    for(i=3;i<=1000;i+=2)
    if(!p[i])
    {
        P[++np]=i;
        for(int j=i*i;j<=1000000;j+=2*i)p[j]=1;
    }
    for(;i<=1000000;i+=2)
        if(!p[i])
            p[++np]=i;
}