Cod sursa(job #1374980)

Utilizator raduzxstefanescu radu raduzx Data 5 martie 2015 11:37:23
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <cmath>
using namespace std;
unsigned long long nrdivizori(unsigned long long a)
{
    unsigned long long d,s=1,k=0;
    while(a%2==0)
    {
        a/=2;
        k+=1;
    }
    s*=(k+1);
    d=3;
    while(a>1)
    {
        k=0;
        while(a%d==0)
        {
            a/=d;
            k+=1;
        }
        s*=(k+1);
        d+=2;
    }
    return s;
}
unsigned long long suma(int a)
{
    unsigned long long d=2,s=1+a,k;
    k=sqrt(a);
    while(d<=k)
    {
        if(a%d==0)
        {
            s+=d+a/d;
            s%=9973;
        }
        d+=1;
    }
    return s;
}
int main()
{
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    unsigned long long n,i,a;
    f>>n;
   // g<<n<<" ";
    for(i=1;i<=n;i++)
    {
        f>>a;
        if(a==1)
            g<<"1 1"<<'\n';
        else
            g<<nrdivizori(a)<<" "<<suma(a)<<'\n';
    }
    f.close();
    g.close();
    return 0;
}