Cod sursa(job #2311294)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 ianuarie 2019 21:23:08
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define MAXNR 1000000
#define MOD 9973
/// TONI BO$$ was here
/// #MLC
using namespace std;
char ciur[MAXNR+1];
int prime[MAXNR/10+1];
int main()
{
    int i,j,n,t,ct,e,nrdiv,sumdiv,z;
    long long x,fact;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    for(i=4; i<=MAXNR; i+=2)
        ciur[i]=1;
    for(i=3; i*i<=MAXNR; i++)
        if(!ciur[i])
            for(j=i*i; j<=MAXNR; j+=i)
                ciur[j]=1;
    ct=1;
    prime[1]=2;
    for(i=3; i<=MAXNR; i+=2)
        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=(1LL*fact*z);
                x=(x/z);
                e++;
            }
            nrdiv*=(e+1);
            sumdiv=(1LL*sumdiv*((1LL*z*fact-1)/(z-1)))%MOD;
            ct++;
        }
        if(x>1)
        {
            nrdiv*=2;
            sumdiv=(1LL*sumdiv*(1LL*x*x-1)/(x-1))%MOD;
        }
        printf("%d %d\n",nrdiv,sumdiv);
    }
    return 0;
}