Cod sursa(job #2721750)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 12 martie 2021 10:44:42
Problema Suma si numarul divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

bool ciur[2000003];
long long prime[1000003];
long long nr;
long long x,n;

void erat()
{
    ciur[1]=1;
    ciur[0]=1;
    for(long long i=2; i<1000003; i++)
    {
        if(ciur[i]==0)
        {
            prime[nr++]=i;
            for(long long j=i*i; j<1000003; j+=i)
            {
                ciur[j]=1;
            }
        }
    }
}

int main()
{
    fin>>n;
    erat();
    while(n--)
    {
        long long nrdiv=1;
        long long sum=1;
        fin>>x;
        for(int i=0; prime[i]*prime[i]<=x && i<nr; i++)
        {
            int exponent=0;
            if(x%prime[i]==0)
            {
                while(x%prime[i]==0 && x>0)
                {
                    exponent++;
                    x/=prime[i];
                    //cout<<x<<" "<<prime[i]<<" "<<exponent<<"\n";
                }
                nrdiv=nrdiv*(exponent+1);
                sum=sum*(pow(prime[i],exponent+1)-1)/(prime[i]-1);
                //cout<<sum<<"\n";
                sum%=9973;
            }
        }
        if(x>0)
        {
            fout<<2*nrdiv<<" "<<(sum*(x+1))%9973<<"\n";
            //cout<<"a\n";
        }
        else fout<<nrdiv<<" "<<sum%9973<<"\n";
    }
    return 0;
}