Cod sursa(job #1787564)

Utilizator Costel_DraghiciDraghici Constantin Costel_Draghici Data 24 octombrie 2016 19:59:14
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#define Nmax 1000000
#define MOD 9973
using namespace std;
bool v[Nmax+1];
int a[Nmax/2];
int k,n,x,s,e;
void Ciur()
{
    for(int i=2;i<=Nmax;i++)
    {
        if(v[i]==0)
        {
            a[++k]=i;

            for(int j=2;j*i<=Nmax;j++)
                v[j*i]=1;
        }
    }
}
void divizori(int &s,int &e,long long x)
{
    int p;
    s=e=1;
    long long y;
    for(int i=1;i<=k && 1LL*a[i]*a[i]<=x;i++)
    {
        if(x%a[i])
            continue;

        p=1;
        y=a[i];
        while(x%a[i]==0)
        {
            x=x/a[i];
            p++;
            y*=a[i];
        }
        e*=p;
        s=s*((y-1)/(a[i]-1))%MOD;
    }
    if(x>1)
    {
        e*=2;
        s=1LL*s*(x+1)%MOD;
    }
    printf("%d %d\n",e,s);
}

int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    Ciur();
    scanf("%d",&n);

    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        divizori(s,e,x);
    }
}