Cod sursa(job #1585835)

Utilizator gorni97aaa aaa gorni97 Data 31 ianuarie 2016 15:27:16
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define MAX_N 1000005
using namespace std;
long long n;
int m,prim[80000];
bool v[1000005];



void ciur()
{int i,j;
    for(i=1;i<MAX_N;i++)
v[i]=0;
m=0;

v[2]=0;i=2;
while(i<=MAX_N)
{if(v[i]==0)
{j=1;
m++;
prim[m]=i;
while((i*(j+1))<=MAX_N)
{j++;
v[j*i]=1;
}
}
i++;}
}

int pow(int x,int y)
{int n;
if(y==0) return 1;
n=1;
while(y>0)
{
if(y%2==0)
{x=x*x;
y=y/2;}
else
{n=n*x;
y--;}
}
return n;

}

int main()

{ int t,i,sum,nr,max,x,y,d;


fstream f("ssnd.in",ios::in);
fstream g("ssnd.out",ios::out);
f>>t;
ciur();

max=0;
for(x=1;x<=t;x++)

{f>>n;
if(v[n]==0)
    cout<<2<<" "<<(n+1)%9973<<'\n';
else
{sum=1;
nr=1;
    i=1;
    while(n!=1)
    {d=0;
        while(n%prim[i]==0)
    {d++;
    n=n/prim[i];
    }
   nr=nr*(d+1)%9973;
    sum=(sum*((pow(prim[i],d+1)-1)/(prim[i]-1)))%9973;

    i++;

    }
    cout<<nr%9973<<" "<<sum%9973<<'\n';
}}


    f.close();
    g.close();

}