Cod sursa(job #2174737)

Utilizator robertro1Benedek Robert George robertro1 Data 16 martie 2018 13:12:01
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
#define mod 9973
using namespace std;
typedef  long long ll;
bool p[1000005];
int pr[1000001];
int k;
int exp(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 prim(ll n)
{
    p[1]=1;
    for(int i=2; i<=n; i+=1)
    {
        if(p[i]==0)
        {
            pr[++k]=i;



        for(int j=2; j*i<=n; ++j)
            p[i*j]=1;
        }
    }


}
int main()
{
     ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    int t,n;
    prim(1000001);
    int d,nd=1,ns=1,rep,d1,d2;
    f>>t;
    for(int i=1; i<=t; ++i)
    {
        f>>n;
        nd=1;
        ns=1;

        for(int i=1; i<=k && 1LL * pr[i]* pr[i] <=n;++i)
        {
            if(n%pr[i]==0)
            { rep=0;
                while (n%pr[i]==0)
                {
                    n/=pr[i];
                    rep++;
                }

                nd*=(rep+1);

                d1=((exp(pr[i],rep+1)-1)) ;
                d2=exp(pr[i]-1,mod-2);

                ns=(((ns*d1)%mod)*d2)%mod;
            }


        }
        if(n>1)
        {nd*=2;
            ns = (1LL*ns*(n+1) % mod);
        }

        g<<nd<<" "<<ns<<'\n';


    }

    return 0;
}