Cod sursa(job #822461)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 23 noiembrie 2012 16:56:27
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 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,*P,e;
long long n,s,p,f;
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(i=1;i<=np&&x[i]*x[i]<=n;i++)
            if(!(n%x[i]))
            {
                for(e=1;n%x[i]==0;n/=x[i],e++);nd*=e;
                s=0;f=x[i]%MOD;p=1;
                for(;e;e--)
                {
                    s+=p;
                    p*=f;
                }
               // s%=MOD;
                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;
}