Cod sursa(job #822922)

Utilizator UMihneaUngureanu Mihnea UMihnea Data 24 noiembrie 2012 11:26:23
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int t,P[1000010],S,N,i,np,s,q,e,pr;
long long int n;
void ciur();

int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    ciur();
    scanf("%d",&t);
    for(;t;t--)
    {
        scanf("%lld",&n);
        S=1; N=1;
        for(i=1;i<=np&&P[i]*P[i]<=n;i++)
            if(n%P[i]==0)
            {
                s=1; q=1;
                e=1; pr=P[i]%9973;
                while(n%P[i]==0)
                {
                    e++;
                    q=(q*pr)%9973;
                    s+=q;
                    n/=P[i];
                }
                N*=e;
                S=(S*s)%9973;
            }
        if(n>1)
        {
            N*=2;n=(n+1)%9973;
            S=(S*(int)n)%9973;
        }
        printf("%d %d\n",N,S);
    }
    return 0;
}
void ciur()
{
    int k,j;
    P[1]=2;
    np=1;
    for(k=3;k<=1000;k+=2)
        if(P[k]==0)
        {
            np++;
            P[np]=k;
            for(j=k*k;j<=100000;j+=2*k)
                P[j]=1;
        }
    for(k=1001;k<=100000;k+=2)
        if(P[k]==0)
        {
            np++;
            P[np]=k;
        }
}