Cod sursa(job #2457154)

Utilizator tomaionutIDorando tomaionut Data 16 septembrie 2019 19:27:07
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define N 1000000
#define LL long long
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset <1000000> b;
int cnt,prim[500000];
void ciur()
{
    int i,j;
    b[1]=b[0]=1;
    for (i=4; i<=N; i+=2)
        b[i]=1;
    for (i=3; i*i<=N; i+=2)
        if (b[i]==0)
    for (j=i*i; j<=N; j+=2*i)
    b[j]=1;
    cnt=0;
    for (i=1; i<=N; i++)
        if (b[i]==0)
    prim[++cnt]=i;
}
LL Quick(LL a, LL b)
{
    LL p=1;
    while (b)
    {
        if (b%2==1) p=p*a;
        b/=2;
        a=a*a;
    }
    return p;
}
void functie(LL x)
{
    LL i,p,nrd=1,sd=1,e;
    for(i=1; prim[i]*prim[i]<=x; i++)
    {
        p=prim[i];
        e=0;
        if (x%p==0)
        {
        while (x%p==0)
        {
            e++;
            x/=p;
        }
        nrd*=(e+1);
        sd=(sd*((Quick(p,e+1)-1)/(p-1)))%9973;
        }
    }
    if (x!=1)
    {
        nrd*=2;
        sd=(sd*(x*x-1)/(x-1))%MOD;
    }
    fout << nrd << " " << sd << "\n";
}
int main()
{
    long long x,n,i;
    ciur();
    fin >> n;
    for (i=1; i<=n; i++)
    {
        fin >> x;
        functie(x);
    }



    return 0;
}