Cod sursa(job #1684466)

Utilizator KOzarmOvidiu Badea KOzarm Data 11 aprilie 2016 08:11:28
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int a[500000],n,i,k,w;
bool ok[1000005];
void ciur()
{
    for(int i=2;i*i<=1000000;i++)
    {
        if(ok[i]==0)
        {
            a[++w]=i;
            for(int j=i;j*i<=1000000;j++)
                ok[i*j]=1;
        }
    }
}
int putere(int x,int p)
{
    if(p!=0)
    {
        if(p%2==0)
        {
            int t=putere(x,p/2);
            return t*t%9973;
        }
        else
            return putere(x,p-1)*x%9973;
    }
    else
    return 1;
}
void divizori(int n)
{
    int t=1;
    int sum=1;
    for(int i=1;a[i]*a[i]<=n;i++)
    {
        int s=0;
        while(n%a[i]==0)
        {
            s++;
            n/=a[i];
        }
        t=t*(s+1);
        sum=sum*(putere(a[i],s+1)-1)/(a[i]-1);
    }
    if(n!=1)
    {
        t*=2;
        sum=sum*(putere(n,2)-1)/(n-1);
    }
    fout<<t<<" "<<sum<<"\n";
}
int main()
{
    fin>>k;
    ciur();
    while(k)
    {
        k--;
        fin>>n;
        divizori(n);
    }
    return 0;
}