Cod sursa(job #1393482)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 19 martie 2015 14:42:20
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>
#define mod 9973

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;

        aux=nr;
        while (prime[i]<=nr)
        {
            exponent=0;
                while (aux%prime[i]==0)
                {
                    exponent++;
                    aux/=prime[i];
                }
                if (exponent)
            suma*=((putere(prime[i],exponent+1)-1)/(prime[i]-1))%mod;
            nrd*=(exponent+1);
              i++;
        }
        if (aux==1) g<<nrd<<" "<<suma%mod<<'\n';
                else
                    g<<"2 "<<nr+1<<'\n';
    }

    return 0;
}