Cod sursa(job #2539168)

Utilizator RedXtreme45Catalin RedXtreme45 Data 5 februarie 2020 18:36:28
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <vector>
#define Nmax 1000010
#define mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
vector <long long int> prime;
long long int v[Nmax],q,nrdiv,S;
void ciur()
{
    prime.push_back(2);
    for (long long int i=3; i<=Nmax; i+=2)
    {
        if (v[i]==0)
        {
            prime.push_back(i);
            for (long long int j=2*i; j<=Nmax; j+=i)
            {
                v[j]=1;
            }
        }
    }
}
void rezolvare (long long int start)
{
    for (auto x:prime)
    {
        if (x*x<=start)
        {
            if (start%x==0)
            {
                long long int nr=0,p=1,s=1;
                while (start%x==0)
                {
                    nr++;
                    p=(p*x)%mod;
                    start/=x;
                    s=(s+p)%mod;
                }
                S=(S*s)%mod;
                nrdiv*=(nr+1);
            }
        }
        else
            break;
    }
    if (start>1)
    {
        nrdiv*=2;
        start%=mod;
        S=(S*(start+1))%mod;
    }
    fout<<nrdiv<<" "<<S<<"\n";
}
int main()
{
    ciur();
    long long int n,i,j,a,b;
    fin>>q;
    for (i=1; i<=q; i++)
    {
        fin>>n;
        nrdiv=1;
        S=1;
        rezolvare(n);
    }
    return 0;
}