Cod sursa(job #2148561)

Utilizator MentaPopa Marius-Catalin Menta Data 1 martie 2018 19:55:56
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>


using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

const int mod = 9973;
const int maxn = 1000005;

int t,k;
long long prod,nr;

int ciur[maxn],prim[maxn];

void prime()
{
    int i,j;
    for(i=2;i<maxn;i++)
        if(!ciur[i])
        {
            prim[++k] = i;
        for(j=i+i;j<maxn;j+=i)
            ciur[j] = 1;}
}


int putere(int x, int y)
{
    int i,a;
    a = x % mod;
    int r = 1;
    for(i = 0; (1<<i) <= y; i++)
    {
        if( y & (1<<i) )
            r = (r*a) % mod;

        a = (a*a) % mod;
    }
    return r;
}


int main()
{
    f>>t;
    int i,n,x;
    int d,p;
    prime();

    while(t--)
    {
        f>>n;
        prod = 1;
        nr = 1;
        for(i=1;i<=k && prim[i]*prim[i] <= n ; i++)
        {
            if(n % prim[i] == 0 )
           {

            p = 0;
            while( n % prim[i] == 0)
            {
                ++p;
                n /= prim[i];
            }
             nr *= (p+1);

            int q = ((putere(prim[i],p+1)-1)/(prim[i]-1))%mod;
            prod *= q;
           }
        }

        if(n>1)
        {
            nr *= 2;
            prod = prod*(n+1)%mod;
        }


        g<<nr<< " "<<prod << "\n";
    }
}