Cod sursa(job #1366984)

Utilizator sulzandreiandrei sulzandrei Data 1 martie 2015 15:26:31
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
#define dim 1000002
#define mod 9973
#define ull unsigned long long int
bitset<dim> v;
ull n,i,j,t,Ndiv,Sdiv,tes,dp=1,p,d;
bool ok;
void Sieve()
{
    Sdiv = Ndiv = 1;
    if (n%2==0)
    {
        d = p = 1;
        while(n%2==0)
        {
            d++;
            n >>=1;
        }
        p <<=d;
        Ndiv *= d;
        Sdiv *=(p-1)%mod;
    }
    ok = true;
    for(i=3;i<dim && ok==true;i+=2)
        if(v[i]==0)
        {
            for(j=i*i;j<dim;j+=2*i)
                v[j]=1;
            if (i*i>n)
                ok = false;
            if (n%i==0 && ok==true)
            {
                 d = 1;
                 p = i;
                while(n%i==0)
                {
                    n /=i;
                    d++;
                    p *=i;
                }
                Ndiv *=d;
                Sdiv *=(p-1)/(i-1)%mod;

            }
        }
    if(n>1)
    {
        Sdiv *= (n*n-1)/(n-1)%mod;
        Ndiv *=2;
    }
    out<<Ndiv<<" "<<Sdiv%mod<<"\n";
}
int main()
{
    in>>t;
    for(tes=0;tes<t;tes++)
    {
        in>>n;
        Sieve();
    }
    return 0;
}