Cod sursa(job #968969)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 3 iulie 2013 09:25:43
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
#include<cmath>
using namespace std;
const int MAXN=1000001;

bool p[MAXN];
int prim[78498];
int k,t,n,cn,i,put,nrprim;
long long suma,card;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

int main()
{
    for (int i=2;i<MAXN;++i)
    {
        if (!p[i])
        {
            prim[nrprim++]=i;
            for (int j=i+i;j<MAXN;j+=i)
                p[j]=true;
        }
    }
    fin>>t;
    for (k=1;k<=t;++k)
    {
        fin>>n;
        cn=n;
        suma=card=1;
        for (i=0;i<78499 && prim[i]<=cn && cn!=1;++i)
        {
            put=0;
            if (cn%prim[i]==0)
            {
                while (cn%prim[i]==0)
                {
                    ++put;
                    cn/=prim[i];
                }
            }
            card=(card*(put+1))%9973;
            suma=(suma*(((int)pow(prim[i],put+1)-1)/(prim[i]-1)))%9973;
        }
        fout<<card<<' '<<suma<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}