Cod sursa(job #1904066)

Utilizator PaulDurlaAndronie safafasafs PaulDurla Data 5 martie 2017 13:32:39
Problema Suma si numarul divizorilor Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <fstream>
#include <iostream>
#include <cstring>
#include <cmath>
#define MAX 1000000 // cel mai mare nr prim posibil
#define MAXNRP 10000 // nr prime pana la MAX

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int putere(int n,int exp)
{
    int pwn=1;
    for(int i=1;i<=exp;i++)

    {
        pwn=pwn*n;
    }
    return pwn;
}
int main()
{
    int t;
    fin>>t;
    int  nrprime[MAXNRP];
    bool prim[MAX];
    memset(prim,true,sizeof(prim));
    memset(nrprime,0,sizeof(nrprime));
    prim[1]=false;
    prim[0]=false;
    for(long long i=2,j=0;i<=MAX;i++)
    {
        if(prim[i]==true)
        {
            nrprime[++j]=i;
            //cout<<nrprime[j]<<'\n';
            for(int d=2;d*i<=MAX;d++)
            {
                prim[d*i]=false;
            }
        }
    }
    long long n,auxn,sumdiv;
    int j,exp,nrdiv;
    bool ok;
    for(int i=1;i<=t;i++)
    {
        fin>>n;
        exp=0;
        nrdiv=1;
        sumdiv=1;
        auxn=n;
        ok=false;
        for(j=1;auxn>1 and ok==false;)
        {
            if(auxn%nrprime[j]==0)
            {
                exp++;
                auxn=auxn/nrprime[j];
            }
            else
            {
                nrdiv=nrdiv*(exp+1);
                sumdiv=sumdiv*((putere(nrprime[j],exp+1)-1)/(nrprime[j]-1));
                exp=0;
                j++;
            }
        }
        nrdiv=nrdiv*(exp+1);
        sumdiv=sumdiv*((putere(nrprime[j],exp+1)-1)/(nrprime[j]-1));
        exp=0;
        fout<<nrdiv<<' '<<sumdiv%9973<<'\n';
    }
    return 0;
}