Pagini recente » Cod sursa (job #2985011) | Cod sursa (job #905575) | Borderou de evaluare (job #1799557) | Borderou de evaluare (job #2080982) | Cod sursa (job #3161205)
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 1000001, MOD = 9973;
long long n;
int prim[NMAX], nr, t;
bool viz[NMAX];
ifstream f("ssnd.in");
ofstream g("ssnd.out");
void ciur(int n)
{
prim[++nr] = 2;
for(int i = 4; i <= n; i += 2)
viz[i] = 1;
for(int i = 3; i * i <= n; i += 2)
if(viz[i] == 0)
for(int j = i * i; j <= n; j += i)
viz[j] = 1;
for(int i = 3; i <= n; i++)
if(viz[i] == 0)
prim[++nr] = i;
}
int powlg(int a,int b)
{
int sol=1;
while(b)
{
if(b&1)
sol=1LL*sol*a%MOD;
a=1LL*a*a%MOD;
b/=2;
}
return sol;
}
int main()
{
f >> t;
ciur(NMAX);
while(t--)
{
f >> n;
int sumdiv = 1, nrdiv = 1;
for(int i = 1; prim[i]*prim[i] <= n; i++)
if(n % prim[i] == 0)
{
int exp=0;
do
{
n /= prim[i];
exp++;
}
while(n % prim[i] == 0);
nrdiv=nrdiv*(exp+1);
sumdiv = 1LL*sumdiv*(powlg(prim[i],exp+1)-1)% MOD*powlg(prim[i]-1,MOD-2)%MOD;
}
if(n>1)
{
nrdiv*=2;
sumdiv = 1LL*sumdiv*(n*n%MOD-1)% MOD*powlg(n-1,MOD-2)%MOD;
}
g<<nrdiv<<' '<<sumdiv<<'\n';
}
return 0;
}