Pagini recente » Cod sursa (job #2434036) | Cod sursa (job #79239) | Cod sursa (job #3137849) | Cod sursa (job #2500216) | Cod sursa (job #2710071)
#include <iostream>
#include <fstream>
#define MOD 9973
using namespace std;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
int n,div_primi[1000005],ciur[1000005],cnt_div_primi=1;
void gen_ciur()
{
for(int i= 2;i*i<=1000001;i++)
{
if(ciur[i] == 0)
{
div_primi[cnt_div_primi++] = i;
for(int j = 2 ;i*j<=1000001;j++)
{
ciur[i*j] = 1;
}
}
}
}
long long pow(long long b,long long e)
{
if(e == 0)
return 1;
if(e%2 == 1)
{
return (b*pow(b,e-1))%MOD;
}
return (pow(b,e/2)*pow(b,e/2))%MOD;
}
void query(long long x)
{
int cnt = 1,e = 0;
int nr_div = 1,suma_div = 1;
while(x>1)
{
e = 0;
int div = div_primi[cnt];
if(x%div == 0)
{
while(x%div == 0)
{
x/=div;
e++;
}
}
/// folosim formulele de la indicatii de rez
nr_div *= (e+1);
int p1 = (pow(div_primi[cnt], e+1) - 1) % MOD;
/// un fel de invers modular
int p2 = pow(div_primi[cnt]-1, MOD-2) % MOD;
suma_div = (((suma_div*p1)%MOD)*p2)%MOD;
cnt++;
if(cnt>=cnt_div_primi)
break;
}
if(x>1)
{
nr_div*=2;
suma_div = (1LL * suma_div*(x+1))%MOD;
}
g << nr_div<< " "<< suma_div<< '\n';
}
int main()
{
gen_ciur();
f >> n;
for(int i = 1;i<=n;i++)
{
long long x;
f >> x;
query(x);
}
}