Cod sursa(job #598388)

Utilizator predator5047Butiu Alexandru Octavian predator5047 Data 25 iunie 2011 16:59:59
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
using namespace std;
long long int suma=1,nrdiv=1;
long long int pow(long long int a,long long int b)
{
    long long int i,s=1;
    for(i=1;i<=b;i++)
    s*=a;

    return s;
}

void divizor(long long int k)
{
    long long int i,p=0,aux=k;
    if(k%2==0)
    {
        while(k%2==0)
        {
             p++;
             k/=2;
        }
        if(2!=aux)
        {
            suma*= (pow(2,p+1)-1)/(2-1);
            nrdiv*=(2+1);
        }
    }
        for(i=3;i<=k;i+=2)
        {
            p=0;
            if(k%i==0)
            {
                while(k%i==0)
                {
                    p++;
                    k/=i;
                }
                if(i!=aux)
                {
                    suma*= (pow(i,p+1)-1)/(i-1);
                    nrdiv*=(i+1);
                }
            }
        }
}
int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    long long int t,i,k;
    fin>>t;
    for(i=1;i<=t;i++)
    {
        fin>>k;
        divizor(k);
        if(suma==1 && nrdiv==1)
        fout<<2<<" "<<k+1<<"\n";
        else
        fout<<nrdiv<<" "<<suma%9973<<"\n";
        nrdiv=1; suma=1;
    }
    fin.close();
    fout.close();
    return 0;
}