Cod sursa(job #2311273)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 ianuarie 2019 20:57:22
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define MAXNR 1000000
/// TONI BO$$ was here
/// #MLC

using namespace std;
char ciur[MAXNR+1];
long long prime[MAXNR/10+1];
int main()
{
    int i,j,n,t,ct,e;
    long long x,nrdiv,sumdiv,fact,z;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    for(i=2; i*i<=MAXNR; i++)
        if(!ciur[i])
            for(j=i*i; j<=MAXNR; j+=i)
                ciur[j]=1;
    ct=0;
    for(i=2; i<=MAXNR; i++)
        if(!ciur[i])
            prime[++ct]=i;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&x);
        ct=1;
        nrdiv=1;
        sumdiv=1;
        while(prime[ct]*prime[ct]<=x)
        {
            e=0;
            fact=1;
            z=prime[ct];
            while(x%z==0)
            {
                fact*=z;
                x/=z;
                e++;
            }
            nrdiv*=(e+1);
            sumdiv*=((z*fact-1)/(z-1));
            ct++;
        }
        if(x>1)
        {
            nrdiv*=2;
            sumdiv*=((x*x-1)/(x-1));
        }
        printf("%lld %lld\n",nrdiv,sumdiv%9973);
    }


    return 0;
}