Cod sursa(job #1988597)

Utilizator Kio21Bogdan Chiorean Kio21 Data 3 iunie 2017 16:35:23
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

bool v[1000001];
int vect[260001],putere1[25001],divizor[25001];
ll cnt=0,i,j;
void ciur()
{
    for(i=2; i*i<=1000000; i++)
    {
        if(v[i]==0)
        {
            ++cnt,vect[cnt]=i;
            for(j=i*i; j<=1000000; j+=i) v[j]=1;
        }
    }
}

int main()
{
    int t,cnt1,val,putere,x,y,copie,k,l;
    ll n,S,P;
    fin >> t;
    ciur();
    for(i=1; i<=t; i++)
    {
        fin >> n,j=1,cnt1=0,P=1,S=1,copie=0,putere=0;
        while(n>1)
        {
            copie=vect[j];
            if(n%copie==0) n/=copie,putere++,val=copie;
            else ++cnt1,putere1[cnt1]=putere,divizor[cnt1]=val,putere=0,j++;
        }
        ++cnt1,putere1[cnt1]=putere,divizor[cnt1]=val;
        for(k=1; k<=cnt1; k++)
        {
            x=1;
            for(l=1; l<=(putere1[k]+1); l++)
                x*=divizor[k];
            P*=(putere1[k]+1),S*=(((x-1)/(divizor[k]-1))%9973);
        }
        fout << P << " " << S << "\n";
        for(k=1; k<=cnt1; k++)
            putere1[k]=divizor[k]=0;
    }
    return 0;
}