Cod sursa(job #2119621)

Utilizator robertro1Benedek Robert George robertro1 Data 1 februarie 2018 14:38:17
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 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 n,int m)
{
   if(m==1) return n%9973;
   if(m%2==0) return (exp(n,m/2)%9973)*(exp(n,m/2)%9973);
   if(m%2==1) return ((exp(n,m/2)%9973)*(exp(n,m/2)%9973)*n)%9973;

}
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(1000);
    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))/( pr[i]-1);

            ns*=d1;

            }


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

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


    }

    return 0;
}