Pagini recente » Cod sursa (job #1761353) | Cod sursa (job #3298510) | Cod sursa (job #2173670) | Cod sursa (job #2401626) | Cod sursa (job #3326718)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int mare = 1000000;
const int mod = 9973;
long long ridica(long long nr, int p);
bool ciur[mare+2];
int prime[mare], nrprime, t;
long long n;
int main()
{
ciur[0] = ciur[1] = 1;
for(int i = 2; i <= mare; ++i)
{
if(ciur[i] == 0)
{
++nrprime; prime[nrprime] = i;
for(int j = 2*i; j <= mare; j += i)
ciur[j] = 1;
}
}
fin>>t;
while(t--)
{
fin>>n;
long long nrdiv = 1, suma = 1;
for(int i = 1; i <= nrprime && prime[i] * prime[i] <= n; ++i)
{
if(n % prime[i] != 0)
continue;
int d = 0;
while(n % prime[i] == 0)
{
++d;
n /= prime[i];
}
nrdiv = nrdiv * (d+1) % mod;
suma = suma * (ridica(prime[i], d+1) - 1 + mod) % mod;
suma = suma * ridica(prime[i]-1, mod-2) % mod;
}
if(n != 1)
{
nrdiv = nrdiv * 2 % mod;
suma = suma * (ridica(n, 2) - 1 + mod) % mod;
suma = suma * ridica(n-1, mod-2) % mod;
}
fout<<nrdiv<<" "<<suma<<"\n";
}
return 0;
}
long long ridica(long long nr, int p)
{
long long rez = 1;
while(p)
{
if(p % 2)
rez = rez * nr % mod;
nr = nr * nr % mod;
p /= 2;
}
return rez;
}