Cod sursa(job #3282774)

Utilizator David2007David Preda David2007 Data 6 martie 2025 19:36:19
Problema Suma si numarul divizorilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

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

long long int n,x,nrd,sd;
bitset <1000001> ciur;

void ciurul()
{
    for(int i=2;i<=1000001;i++)
        if(ciur[i]==0)
            for(int j=i;1ll*j*i<=1000001;j++)
            ciur[i*j]=1;
}

long long int put(int a,int n)
{
    int p=1;
    while(n)
    {
        if(n%2==1)
            p=p*a;
        a=a*a;
        n/=2;
    }
    return p;
}
int main()
{
    ciurul();
    f>>n;
    for(;n>0;n--)
    {
        f>>x;
        nrd=1;
        sd=1;
        long long int p,d=2;
        while(x>1)
        {
            p=0;
            if(ciur[d]==0)
            {
            while(x%d==0)
            {
                p++;
                x=x/d;
            }

            if(p>0)
                {
                    nrd*=(p+1);
                    sd=sd*((put(d,p+1)-1)/(d-1));
                }
            }

            d++;
            if(x>1 && d*d>x)
                d=x;
        }
        g<<nrd<<" "<<sd%9973<<"\n";
    }

}