Cod sursa(job #1393429)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 19 martie 2015 13:49:40
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>

using namespace std;

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

vector <int> prime;
bitset <1000001> v;
int nrquiz,nr,i,exponent,nrd,suma,aux;

void ciur()
{
    int i,j;
    v[0]=v[1]=1;
    for (i=4; i<=1000000; i+=2)
        v[i]=1;

        for (i=3; i<=1000000; i+=2)
            if (v[i]==0)
            for (j=2*i; j<=1000000; j+=i)
            v[j]=1;

    prime.push_back(2);
    for (i=3; i<=1000000; i+=2)
        if (v[i]==0) prime.push_back(i);
}

int putere(int x, int y)
{
    int i,rez=1;
    for (i=1; i<=y; ++i) rez*=x;
    return rez;
}

int main()
{
    ciur();
    f>>nrquiz;
    while (nrquiz)
    {
        nrquiz--;
        f>>nr;
        i=0;
        nrd=1;
        suma=1;
        bool prim=0;
        aux=nr;
        while (prime[i]<=sqrt(nr))
        {
            exponent=0;
            if (aux%prime[i]==0)
            {
                prim=1;
                while (aux%prime[i]==0)
                {
                    exponent++;
                    aux/=prime[i];
                }
            }
            suma*=(putere(prime[i],exponent+1)-1)/(prime[i]-1);
            nrd*=(exponent+1);
              i++;
        }
        if (!prim) g<<2<<" "<<nr+1<<'\n';
        else
        g<<nrd<<" "<<suma<<'\n';
    }
    return 0;
}