Cod sursa(job #2287511)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 21 noiembrie 2018 23:05:24
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>
#define ll long long
#define NMAX 1000005

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int mod=9973;
ll primes[90000];
bool ciur[NMAX];
ll t,x,k;
void Primes()
{
    ll i,j;
    primes[1]=2;
    k=1;
    for(i = 4; i < NMAX; i+=2)
        ciur[i]=1;
    for(i = 3; i < NMAX; i+=2)
    {
        if(!ciur[i])
        primes[++k]=i;
        for(j=i+i+i; j < NMAX; j+=(i<<1))
            ciur[j]=1;
    }
}
int main()
{
    Primes();
    ll i,nr,s,pow,sum;
    fin>>t;
    for(;t--;)
    {
        fin>>x;
        nr=1;s=1;i=1;
        while(x!=1)
        {
            pow=0;
            sum=1;
            if(primes[i]*primes[i] > x)
            {
                nr*=2;
                s=((s*((x*x-1)/(x-1)))%mod);
                x=1;
            }
            if(x%primes[i]==0)
            {
                while(x%primes[i]==0)
                {
                    pow++;
                    x=x/primes[i];
                }
                nr*=(pow+1);
                for(int j = 0 ; j <= pow ; j++)
                    sum=sum*primes[i];
                sum--;
                s=((s*(sum/(primes[i]-1)))%mod);
            }
            i++;
        }
        fout<<nr<<" "<<s<<'\n';

    }
    return 0;
}