Cod sursa(job #665235)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 21 ianuarie 2012 20:19:39
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <cmath>
#define LE 1000006
using namespace std;
ifstream f ( "ssnd.in" );
ofstream g ( "ssnd.out" );
 long long  i,j,prim[LE],nd,NUM,SUMA=1,K,t,X,P,NUMAR=1,Y;
int main()
{
        for(i=2; i<LE; i++) if (prim[i]==0) {
                        P++,prim[P]=i;
                        for(j=i*i; j<LE; j+=i) prim[j]=1;
                }

        for (t=1,f>>K;t<=K;t++,NUMAR=1,SUMA=1,nd=0) {
                f>>X,Y=X;
                while (X!=1&&nd<P&&prim[nd]*prim[nd]<=Y) {
                        nd++,NUM=0;
                        while (X%prim[nd]==0) X/=prim[nd],NUM++;
                        if (NUM>0) {
                                SUMA*=(pow(prim[nd],NUM+1)-1)/(prim[nd]-1);
                                NUMAR*=(NUM+1);
                        }
                }
                if (X>1) SUMA*=(pow(X,2)-1)/(X-1),NUMAR*=2;
                g<<NUMAR<<" "<<SUMA% 9973<<'\n';
        }

        f.close();
        g.close();
        return 0;
}