Cod sursa(job #2246348)

Utilizator XDDDDariusPetean Darius XDDDDarius Data 26 septembrie 2018 23:03:44
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <math.h>
#include <cstring>
#define M 9973

std::ifstream in("ssnd.in");
std::ofstream out("ssnd.out");

using namespace std;

int sir[1000000];
void ciur()
{
    memset(sir,1,sizeof(sir));
    for(int i=2;i*i<=1000000;i++)
    {
        if(sir[i])
        {
            for(int j=i*i;j<=1000000;j+=i)
                sir[i]=0;
        }
    }
}
long long t,n;
void div(long long k,long long &a,long long &b)
{
    long long p=2,numar,nrdiv=1,prod=1,aux=1,ink=k;
    while(k>1 && p*p<=ink)
    {
        if(k<1000000)
        {
            if(sir[k])
            {
                nrdiv*=2;
                prod*= ((k*k-1)/(k-1))%M;
                return;
            }
        }
        numar=0;
        aux=p;
        while(k%p==0)
        {
            numar++;
            k/=p;
            aux*=p;
        }
        if(k%p)
        {
            nrdiv=(nrdiv*(numar+1))%M;
            prod=(prod* (1LL*((((aux-1)))/(p-1))))%M;

        }

        p++;
    }
    if(k>1)
    {
        nrdiv*=2;
        prod*=(k*k-1)/(k-1);
    }
    a=nrdiv%M;
    b=prod%M;

}


int main()
{
    ciur();
    in>>n;
    for(int i=0; i<n; i++)
    {
        long long a,b;
        in>>t;
        div(t,a,b);
        out<<a<<" "<<b<<"\n";
    }
    return 0;
}