Cod sursa(job #2312774)

Utilizator vladadAndries Vlad Andrei vladad Data 5 ianuarie 2019 15:06:48
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n, t;
long long nr_div(int x)
{
    int nr=1;
    int p=0;
    if(!(x&1))
    {
        while(!(x&1))
        {
            x=x>>1;
            p++;
        }
        nr=p+1;
    }
    int d=3;
    p=0;
    while(d*d<=x)
    {
        if(x%d==0)
        {
            p=0;
            while(x%d==0)
            {
                x/=d;
                p++;
            }
            nr=nr*(p+1);
        }
        d+=2;
    }
    if(x>1) nr=nr<<1;
    return nr;
}
long long s_div(long long x)
{
    long long s=x+1;
    for(int d=2; d*d<=x; d++)
    {
        if(x%d==0)
        {
            s+=d;
            if(d!=x/d) s+=x/d;
        }
    }
    return s;
}
int main()
{
    f>>n;
    int x;
    for(int i=1; i<=n; i++)
    {
        f>>x;
        g<<nr_div(x)<<' '<<s_div(x)<<'\n';
    }
    return 0;
}