Cod sursa(job #2578072)

Utilizator Rares31100Popa Rares Rares31100 Data 10 martie 2020 14:48:12
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>
#define ULL unsigned long long
#define MOD (ULL)9973

using namespace std;

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

ULL t,nrD,ciur[100000],nrC;
ULL nr,S1,S2;
ULL Div[40],Put[40];
bitset <1000001> viz;

void Ciur()
{
    for(int i=2;i<=1000000;i++)
        if(!viz[i])
        {
            ciur[++nrC]=i;
            
            for(int j=2*i;j<=1000000;j+=i)
                viz[j]=1;
        }
}

int main()
{
    in>>t;
    
    Ciur();
    
    while(t--)
    {
        in>>nr;
        nrD=0;
        
        for(int i=1;ciur[i]*ciur[i]<=nr && i<=nrC;i++)
            if(nr%ciur[i]==0)
            {
                Div[++nrD]=ciur[i];
                Put[nrD]=0;
                
                while(nr%ciur[i]==0)
                {
                    nr/=ciur[i];
                    Put[nrD]++;
                }
            }
            
        if(nr!=1)
        {
            Div[++nrD]=nr;
            Put[nrD]=1;
        }
        
        S1=1;
        for(int i=1;i<=nrD;i++)
            S1*=Put[i]+1;
            
        S2=1;
        for(int i=1;i<=nrD;i++)
            S2=(ULL)(S2*( ( pow(Div[i],Put[i]+1)-1 )/( Div[i]-1 ) ) )%MOD;
            
        out<<S1<<' '<<S2<<'\n';
    }
    
    return 0;
}