Cod sursa(job #822447)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 23 noiembrie 2012 16:42:07
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<cstdio>
#include<bitset>
#define MOD 9973
using namespace std;
bitset<1000000> B;
int i,j,k,np,x[80000],t,nd,sd,pc,s,*P,e;
long long n;
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    x[1]=2;np=1;
    for(i=3;i<=1000;i+=2)
        if(!B[i])
        {
            x[++np]=i;
            k=2*i;
            for(j=i*i;j<=1000000;j+=k) B[j]=1;
        }
    for(i=1001;i<=1000000;i+=2)
        if(!B[i]) x[++np]=i;
    scanf("%d",&t);
    for(;t;t--)
    {
        scanf("%lld",&n);
        nd=1;sd=1;
        for(P=x+1;*P&&n-1;P++)
            if(!(n%*P))
            {
                //for(e=1;n%*P==0;n/=*P,e++);                np*=e;

                e=1;k=*P%MOD;s=1;pc=1;
                while(!(n%*P))
                {
                    e++;
                    pc=(pc*k)%MOD;
                    s=s+pc<MOD?s+pc:s+pc-MOD;
                    n/=*P;
                }
                nd*=e;
                sd=(sd*s)%MOD;
            }
        if(n>1)
        {
            nd*=2;
            n=(n+1)%MOD;
            sd=(sd*n)%MOD;
        }
        printf("%d %d\n",nd,sd);
    }
    return 0;
}