Cod sursa(job #993702)

Utilizator sebinechitasebi nechita sebinechita Data 4 septembrie 2013 12:14:41
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
#define baza 1
#define MAX 1000005
#define MOD 1999999973
typedef long long int lli;

lli t,n, i, j;
bool a[MAX];

void ciur()
{
    a[0]=a[1]=1;
    for(i=1;i<=MAX;i++)
    {
        if(!a[i])
        {
            for(j=i*i;j<=MAX;j+=i)
            {
                a[j]=1;
            }

        }
    }
}

int main()
{
    ciur();

    fin>>t;
    for(lli ki=1;ki<=t;ki++)
    {
        lli numere=1;
        lli suma=1;
        fin>>n;
        lli l=sqrt(n);
        for(i=2;i<=l;i++)
        {
            if(!a[i] && n%i==0)
            {
                lli nr=0;
                lli cx=n;
                while(n%i==0)
                {
                    nr++;
                    n/=i;
                }
                numere*=(nr+1);
                suma*=(cx*i/n-1);
                suma/=(i-1);
                l=sqrt(n);
            }
        }
        if(n>1)
        {
            numere*=2;
            suma*=n*n-1;
            suma/=n-1;
        }
        fout<<numere<<" "<<suma<<"\n";
    }



    return 0;
}