Cod sursa(job #1398589)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 24 martie 2015 12:16:14
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <cmath>
#include <vector>
#define mod 9973
#define NMAX 1000001
#define pb push_back

using namespace std;

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

bool v[NMAX];
vector <int> prime;
int i, n, nrquiz, d, suma, nr, nrd, putere;

void ciur()
{
    int i, j;
    v[0]=v[1]=1;
    for (i=4; i<=NMAX; i+=2)
    v[i]=1;
    prime.pb(2);
    for (i=3; i<=NMAX; i+=2)
    if (v[i]==0)
    {
        prime.pb(i);
    for (j=i+i; j<=NMAX; j+=i)
    v[j]=1;
    }
}

int ridicare(int x, int y)
{
    if (y==0) return 1;
    return x*ridicare(x,y-1);
}

int main()
{
    ciur();

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