Cod sursa(job #2430978)

Utilizator mariasmmskklns mariasmm Data 17 iunie 2019 16:01:41
Problema Suma si numarul divizorilor Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <math.h>
#include <limits>
using namespace std;
const int nMax= 500005;
bitset<nMax> prim;
void ciur ()
{
    for (unsigned int d=3; d*d<=1e6; d+=2)
    {
        for (unsigned int j=3; d*j<=1e6; j+=2)
                    prim[d*j/2]=1;
    }
}
int suma (int p, int d)
{
    int s2=1;
    while (d+1)
    {
        s2*=p;
        d--;
    }
    s2--;
    s2/=(p-1);
    return s2;
}
int main()
{
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    unsigned int t;
    f>>t;
    ciur();
    for (unsigned int i=0; i<t; i++)
    {
        unsigned int div=0, divi=1, p=1,nr;
        unsigned long long int s=1;
        f>>nr;
        while (nr%2==0)
        {
            div++;
            nr/=2;
        }
        if (div==1)
        {
            p*=2;
            s*=3;
        }
        else
        if (div>1)
        {
            p*=(div+1);
            s*=suma(2,div);
        }
        while ((nr!=1)&&(divi*2+1<=sqrt(nr)))
        {
            div=0;
            if (!prim[divi])
            {
                while (nr%(divi*2+1)==0)
                {

                    div++;
                    nr/=(divi*2+1);
                    if (nr%(divi*2+1)!=0)
                    {
                        if (div==1)
                            {
                                p*=2;
                                s*=divi*2+2;
                            }
                                    else
                        if (div>1)
                        {
                            p*=(div+1);
                            s*=suma(divi*2+1,div);
                        }
                    }
                }
                divi++;
            } else
            divi++;
        }
        if (nr>1)
            {
                p*=2;
                s*=(nr+1);
            }
        g<<p<<" "<<s%9973;
        g<<"\n";
    }
    return 0;
}