Cod sursa(job #2539313)

Utilizator RedXtreme45Catalin RedXtreme45 Data 5 februarie 2020 19:54:02
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 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;
int v[Nmax],q;
long long int 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 (int start)
{
    for (int i=0;i<prime.size() && prime[i]*prime[i]<=start && start>1;i++)
    {
        long long int x=prime[i];
            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);
            }
    }
    if (start>1)
    {
        nrdiv*=2;
        start%=mod;
        S=(S*((start+1)%mod))%mod;
    }
    fout<<nrdiv<<" "<<S<<"\n";
}
int main()
{
    ciur();
    long long int n,i;
    fin>>q;
    for (int i1=1; i1<=q; i1++)
    {
        fin>>n;
        nrdiv=1;
        S=1;
        rezolvare(n);
    }
    return 0;
}