Cod sursa(job #2262572)

Utilizator VladAlexandruAnghelache Vlad VladAlexandru Data 17 octombrie 2018 17:00:09
Problema Suma si numarul divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int ptr(int x,int e)
{
    int r=1;
    while(e>0)
    {
        if(e%2==0)
        {
            x=x*x;
            e/=2;
        }
        else
        {
            r*=x;
            e--;
        }
    }

    return r;
}
void fprimi(int n)
{
    int pr=1,s=1;

    int p=0;
    while (n%2==0)
    {
        n/=2;
        p++;
    }
    if(p>0) {pr=pr*(p+1);
            s=s*(ptr(2,p+1)-1);}

    for(int d=3;d+d<=n;d+=2)
    {
        p=0;
        while(n%d==0)
        {
            n/=d;
            p++;
        }
        if(p>0) {pr=pr*(p+1);
            s=s*(ptr(d,p+1)-1)/(d-1);}

    }
    if(n!=1){pr=pr*2;
            s=s*(ptr(n,2)-1)/(n-1);}


    fout<<pr<<" "<<s%9973<<endl;

}
int main()
{
    int t,n;
    fin>>t;
    for(int i=1;i<=t;i++)
    {
        fin>>n;

    fprimi(n);
    }

    return 0;
}