Cod sursa(job #1231505)

Utilizator afkidStancioiu Nicu Razvan afkid Data 20 septembrie 2014 20:01:13
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define sDIMN 1000005
#define mod 9973

using namespace std;

int t,sum,nrDiv,v[sDIMN];
bool check[sDIMN];


int main()
{
    long long n;
    ifstream in("ssnd.in");
    ofstream out("ssnd.out");
    int dim=1;
    v[1]=2;
    for(int i=3;i<sDIMN;i+=2)
    {
        if(check[i]==true)
            {
                for(int j=i+i+i;j<sDIMN;j+=(i<<1))
                    check[j]=false;
                v[++dim]=i;
            }
    }
    in >> t;
    while(t!=0)
    {
        in>>n;
        nrDiv=1;
        sum=1;
        for(int i=1;v[i]*v[i]<=n && i<=dim;++i)
        {
        if(n%v[i]==0)
        {
            int cnt=0;
            long long aux=n;
            while(n%v[i]==0)
            {
                n/=v[i];
                cnt++;
            }
            nrDiv*=cnt+1;
            sum*=((aux/n)*v[i]-1)/(v[i]-1);
            sum%=mod;
        }
        }
        if (n > 1)
        {
            nrDiv*=2;
            sum = (sum*(n*n-1)/(n-1))%mod;
        }
        out << nrDiv<<" "<< sum<<endl;
        t--;
    }
    return 0;
}