Cod sursa(job #1496181)

Utilizator LurchssLaurentiu Duma Lurchss Data 4 octombrie 2015 15:47:19
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>

#define max_n 1000003
#define mod 9973
using namespace std;

long long int n;
bitset<max_n> viz;
long long int k,prim[max_n],t;

long long int lgput(int x,int p)
{
    int rez=1;
    x%=mod;
    for(;p;p>>=1)
    {
        if(p & 1)
        {
            rez*=x;
            rez%=mod;
        }
        x*=x;
        x%=mod;
    }
    return rez;
}

void ciur()
{
    for(int i=2;i<max_n;i++)
    {
        if(viz[i]==0)
            {
                prim[++k]=i;
                for(int j=i+i;j<max_n;j+=i)
                viz[j]=1;
                }
    }
}
void solve()
{
    scanf("%d ",&t);
    int nd=1,sd=1;
    for(int i=1;i<=k && prim[i]*prim[i]*1LL<=t;++i)
    {
        if(t % prim[i])
            continue;
        int p=0;
        while(t%prim[i]==0)
            p++,t/=prim[i];
        nd*=(p+1);
        int p1,p2;
        p1=(lgput(prim[i],p+1)-1)%mod;
        p2=lgput(prim[i]-1,mod-2)%mod;

        sd = (((sd*p1*1LL)%mod)*p2)%mod;
    }
    if(t>1)
       {
        nd*=2;
        sd= (1LL*sd*(t+1))%mod;}
    printf("%d %d\n",nd,sd);
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d ",&n);
    ciur();
    for(int i=1;i<=n;i++)
        solve();
    return 0;
}