Cod sursa(job #577672)

Utilizator Sm3USmeu Rares Sm3U Data 10 aprilie 2011 14:58:21
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 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=2;i<maxx;++i)
    {
        if(a[i]==false)
        {
            ciur[n++]=i;
            for(int j=i+i;j<maxx;j+=i)
                a[j]=true;
        }
    }
}

void Div()
{
    int x;
    int s=1;
    int nr=1;
    scanf("%d",&x);
    for(int i=0;i<n && ciur[i]*ciur[i]<=x;i++)
    {
        int y=0;
        int z=1;
        while(x%ciur[i]==0)
        {
            x/=ciur[i];
            y++;
            z*=ciur[i];
            z%=mod;
        }
        if(y)
        {
            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;
}