Cod sursa(job #1376519)

Utilizator MarcSpataruMarc Spataru MarcSpataru Data 5 martie 2015 17:40:42
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<cstdio>
#define nrmax 1000000
using namespace std;
char ciur[nrmax+1];
void ciurr()
{
    long long d,i;
    d=2;
    while(d*d<=nrmax)
    {
        for(i=2;i*i<=nrmax;i++)
        {
            ciur[d*i]=1;
        }
        d++;
        while(ciur[d]==1)
        {
            d++;
        }
    }
}
long long suma(long long nr)
{
    int sumdiv,i,f,p;
    sumdiv=1;
    for(i=2;i<=nr;i++)
    {
        if(ciur[i]==0)
        {
            f=1;
            p=0;
            while(nr%i==0)
            {
                nr=nr/i;
                p++;
                f=f*i;
            }
            if(p!=0)
            {
                f=f*i-1;
                sumdiv*=(f/(i-1));
            }
        }
    }
    if(nr!=1)
    {
        sumdiv*=(nr*nr-1)/(nr-1);
    }
    return sumdiv;
}
long long nrdiv(long long nr)
{
    long long d=2,p,tau=1;
    while(nr>1)
    {
        p=0;
        while(nr%d==0)
        {
            nr=nr/d;
            p++;
        }
        tau*=(p+1);
        d++;
    }
    return tau;
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    long long n,i,nr,sdiv,nd;
    scanf("%I64d",&n);
    ciurr();
    for(i=1;i<=n;i++)
    {
        scanf("%I64d",&nr);
        nd=nrdiv(nr);
        sdiv=suma(nr);
        printf("%I64d %I64d\n",nd%9973,sdiv%9973);
    }
    return 0;
}