Pagini recente » Cod sursa (job #1110246) | Cod sursa (job #1356293) | Cod sursa (job #3237226) | Cod sursa (job #37123) | Cod sursa (job #1970102)
#include <bits/stdc++.h>
#define MaxN 1000000
#define MOD 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bitset <MaxN> isPrime;
vector <int> Primes;
int pw(long long x,long long n)
{
long long y=1;
while(n>1) if(n%2) y*=x,y%=MOD,x*=x,n/=2,x%=MOD;
else y%=MOD,x*=x,n/=2,x%=MOD;
return x*y%MOD;
}
void computePrimes()
{
Primes.push_back(2);
for(int i = 3; i * i <= MaxN; i += 2)
if(!isPrime[i])
{
Primes.push_back(i);
for(int j = i * i; j <= MaxN; j += 2 * i)
isPrime[j] = 1;
}
}
void solve()
{
long long T,N;
f>>T;
while (T--)
{
f>>N;
long long nrDiv = 1,sumTop = 1,sumBot = 1;
for(auto p:Primes)
if(p*p <= N && N%p==0)
{
int d = 0;
while (N % p == 0) ++d,N/=p;
nrDiv *= (d+1);
sumTop = (sumTop * (pw(p,d+1) - 1 ));
sumBot = (sumBot * (p-1)) % MOD;
}
if (N != 1)
{
nrDiv *= 2;
sumTop = (sumTop * (pw(N,2) - 1 + MOD));
sumBot = (sumBot * (N-1)) % MOD;
}
g<<nrDiv<<' '<<(sumTop * pw(sumBot,MOD-2))%MOD<<'\n';
}
}
int main()
{
computePrimes();
solve();
}