Cod sursa(job #963567)

Utilizator Toast97Calin Farcas Toast97 Data 17 iunie 2013 19:40:14
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <bitset>

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

bitset<1000002> ciur;
int prime[100000];

long long putere( long long n, long long p)  {

long long k=1;

while(p!=0) {
        if(p&1)  k=(k*n)%9973;
        n=(n*n)%9973;
        p/=2;
    }

     return k;

}

int main()
{
    long long t, n, i, j, r=0, nd, sd, d, p, n2;

    f>>t;

    for(i=2;i<=1000000;i++) if(!(ciur[i])) {prime[++r]=i; for(j=2*i;j<=1000000;j+=i) ciur[j]=1;}




    for(i=1;i<=t;i++)   {

        f>>n; n2=n;

        j=1; nd=sd=1;

        while(prime[j]*prime[j]<=n2 && prime[j])   {

             p=0; d=prime[j];
             while(!(n%d)) {n/=d; p++;}

             nd*=(p+1);
             sd*=(putere(d, p+1) - 1)/(d-1);

             j++;
        }

        if(n>1) {nd=2; sd=n+1;}

        g<<nd<<" "<<sd<<'\n';

    }


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

}