Pagini recente » Cod sursa (job #865507) | Cod sursa (job #1709074) | Cod sursa (job #1155138) | Cod sursa (job #372021) | Cod sursa (job #1419894)
#include <iostream>
#include <fstream>
using namespace std;
const int dmax = 1000005;
const int mod = 9973;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int T; long long N; int NR_DIV; int SUMA_DIV;
bool ciur[dmax]; long long v[dmax]; int w;
void CIUR()
{
ciur[0]=1; ciur[1]=1;
for(int i=2; i<=dmax; i++)
{
if(ciur[i]==0)
{
v[++w]=i;
for(int j=i+i; j<=dmax; j=j+i) ciur[j]=1;
}
}
}
long long Exp_log(long long x, long long y) //CALCULAM x^y PRIN RIDICARE LA PUTERE IN TIMP LOGARITMIC
{
long long answer=1;
while(y)
{
if(y&1) answer=answer*x;
x=x*x;
y >>= 1;
}
return answer;
}
int main()
{
long long exp;
in >> T;
CIUR();
for(int i=1; i<=T; i++)
{
in >> N;
NR_DIV=1; SUMA_DIV=1;
for(int k=1; k<=w && v[k]*v[k]<=N; k++)
{
if(N%v[k]==0)
{
exp=0;
while(N%v[k]==0) {exp++; N=N/v[k];}
NR_DIV=NR_DIV*(exp+1);
SUMA_DIV=SUMA_DIV*((Exp_log(v[k],exp+1)-1)/(v[k]-1))%mod;
}
}
if(N > 1) {NR_DIV=(2*NR_DIV); SUMA_DIV=SUMA_DIV*(N+1);}
out << NR_DIV <<" "<< SUMA_DIV%mod << '\n';
}
return 0;
}