Cod sursa(job #598397)

Utilizator predator5047Butiu Alexandru Octavian predator5047 Data 25 iunie 2011 17:22:44
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 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;
    nrdiv=suma=1;
    if(k%2==0)
    {
        while(k%2==0)
        {
             p++;
             k/=2;
        }
        if(2!=aux)
        {
            suma*= (pow(2,p+1)-1)/(2-1);
            nrdiv*=p+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*=p+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";
    }
    fin.close();
    fout.close();
    return 0;
}