Pagini recente » Cod sursa (job #2916993) | Cod sursa (job #1595450) | Cod sursa (job #1501407) | Cod sursa (job #2489308) | Cod sursa (job #1412032)
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
#include <string>
#include <fstream>
#include <cctype>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <map>
#include <bitset>
#include <stack>
using namespace std;
const int MOD = 9973;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset<2000007> prim;
void euclid(int a, int b, long long &x, long long &y)
{
if(b == 0)
{
x = 1;
y = 0;
return;
}
euclid(b,a%b,x,y);
long long aux = x;
x = y;
y = aux - y*(a/b);
}
int getInverse(int a)
{
long long x, y;
euclid(a,MOD,x,y);
if(x < 0)
x += MOD;
return x;
}
void solve()
{
long long n;
fin>>n;
long long nrdiv = 1, sumdiv = 1;
long long auxn = n;
for(long long i = 2; i*i <= auxn; i++ )
if(prim[i] && n%i == 0)
{
int x = i;
int e = 0;
long long xd = 1;
while(n%i == 0)
{
n /= i;
xd *= x;
e ++;
}
nrdiv *= (e+1);
sumdiv *= (xd*x-1)*getInverse(x-1);
sumdiv %=MOD;
}
if(n > 1)
sumdiv = n+1, nrdiv = 2;
fout<<nrdiv<<' '<<sumdiv%MOD<<'\n';
}
int main()
{
//freopen("1.in");
//freopen("1.out");
//memset(prim,1,sizeof(prim));
prim.set();
prim[0] = prim[1] = false;
for(int i = 1; i <= 1000000; i ++)
if(prim[i])
for(int j = 2; j*i <= 1000000; j ++)
{
prim[i*j] = false;
}
int t;
fin>>t;
for(int i = 1; i <= t; i++)
solve();
return 0;
}