Cod sursa(job #577706)

Utilizator Sm3USmeu Rares Sm3U Data 10 aprilie 2011 15:17:03
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#define maxx 1000002
#define mod 9973
using namespace std;


bool a[maxx];
int ciur[maxx];
int n;

void ciurr()
{
    for(int i=4;i<maxx;i+=2)
        a[i]=true;
    ciur[n++]=2;
    for(int i=3;i<maxx;i+=2)
    {
        if(a[i]==false)
        {
            ciur[n++]=i;
            for(int j=i+i;j<maxx;j+=i)
                a[j]=true;
        }
    }
}

void Div()
{
    long long x;
    int s=1;
    int nr=1;
    scanf("%lld",&x);
    for(int i=0;i<n && x!=1;i++)
    {
        if(x%ciur[i]!=0)
            continue;
        int y=0;
        int z=1;
        while(x%ciur[i]==0)
        {
            x/=ciur[i];
            y++;
            z*=ciur[i];
            z%=mod;
        }
        nr*=y+1;
        nr%=mod;
        z*=ciur[i];
        z%mod;
        s*=(z-1)/(ciur[i]-1);
        s%=mod;


    }
    nr%=mod;
    s%=mod;
    printf("%d %d\n",nr,s);
}

int main()
{
    freopen("ssnd.in","r",stdin);
   // freopen("ssnd.out","w",stdout);
    ciurr();
    int t;
    scanf("%d",&t);
    while(t--)
    {
        Div();
    }

    return 0;
}