Cod sursa(job #963682)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 17 iunie 2013 23:53:21
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define N 1000000
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");

int T,t,k,Prim[80000];
char viz[N+10];

void GenereazaNumerePrime()
{
    for(int i=2;i<=N;i++)
        if(viz[i]==0)
        {
            Prim[++k]=i;
            for(int j=2*i;j<=N;j+=i)viz[j]=1;
        }
}

void solve()
{
    unsigned long long n;
    f>>n;
    unsigned long long Nr=1,S=1;
    int i=1;
    while(n!=1)
    {
        while(n % Prim[i]!=0)i++;
        int alfa=0,p=Prim[i];
        unsigned long long Putere=1;
        while(n % p==0)
        {
            n/=p,alfa++;
            Putere*=p;
        }
        Nr*=(alfa+1);
        S*=(Putere*p-1)/(p-1);
    }
    g<<Nr<<" "<<S<<'\n';
}
int main()
{
    GenereazaNumerePrime();
    f>>T;
    for(int i=1;i<=T;i++)solve();
    f.close();g.close();
    return 0;
}