Cod sursa(job #1907011)

Utilizator aeromaniaXRadoi Iulian aeromaniaX Data 6 martie 2017 17:25:35
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;
#define mod 9973
bool a[1000009];
int n,r;
int v[999999];
long long x,nrd;

void ciur()
{
    a[1]=1;

    for(int i=2;i<=500001;i++)
        if(a[i]==0){
            v[++r]=i;
            for(int j=2;i*j<=1000000;j++)
                a[i*j]=1;
}

}

void cit()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
}


int main()
{
    cit();
    scanf("%d",&n);

    ciur();

    sort(v+1,v+r+1);
    for(int i=1;i<=n;i++)
    {

        scanf("%lld",&x);
        long long xi=x;
        nrd=1;
        int j=1;
        if(x==1) {printf("1\n"); continue;}

        if(x<1000000 && a[x]==0) printf("2 %d\n",1+x);
        else{
           int d=2;
           long long sd=1;
            while(x>1){
                int p=0;
                while(x%d==0)
                {
                    p++;
                    x=x/d;
                }
                if(p){
                    nrd=nrd*(p+1);
                    sd=sd*((pow(d,p+1)-1)/(d-1));
                }
                d=v[++j];
                if(x<1000000 && a[x]==0){
                    nrd=nrd*2;
                    sd=sd*((pow(x,2)-1)/(x-1));
                    break;
                }
            }


        printf("%lld %lld\n",nrd,sd%mod);
        }
    }
    return 0;

}