Pagini recente » Cod sursa (job #2739983) | Cod sursa (job #466467) | Cod sursa (job #2826095) | Cod sursa (job #217028) | Cod sursa (job #1476814)
#include<fstream>
#include<stdio.h>
#include<string.h>
#include<bitset>
using namespace std;
#define MOD 9973
#define MAX 100001
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
bitset<MAX> prim;
int nrPrime[100001];
int cntNrPrime = 1;
void ciur()
{
nrPrime[cntNrPrime++] = 1;
for(int i=2;i<MAX;i++)
{
int j=i;
if(prim[j] == 0)
{
nrPrime[cntNrPrime++] = j;
for(j = i+i ;j<=MAX;j+=i)
prim[j] = 1;
}
}
}
inline int pow(int x, int p) {
// INFOARENA
int rez = 1;
x %= MOD;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
int main()
{
// freopen("ssnd.in", "r", stdin);
// freopen("ssnd.out", "w", stdout);
int t;
long long n;
//scanf("%d", &t);
fin>>t;
ciur();
for(int i=1;i<=t;i++)
{
int cnt =1;
//scanf("%lld", &n);
fin>>n;
long long N = n;
long long sum = 1;
for(int ii=2;(1LL * nrPrime[ii] * nrPrime[ii]<=N) && (ii<cntNrPrime);ii++)
{
if(n%nrPrime[ii] !=0)
continue;
int d = 0;
while(n%nrPrime[ii] == 0)
{
n/=nrPrime[ii];
d++;
}
cnt *= (d+1);
// infoarena
long long p1 = (pow(nrPrime[ii], d+1) - 1) % MOD;
long long p2 = pow(nrPrime[ii]-1, MOD-2) % MOD;
sum = (((sum * p1) % MOD) * p2) % MOD;
// infoarena
}
if(n>1)
{
// dp infoarena
cnt *=2; // nu inteleg de ce
sum = (1LL*sum*(n + 1)) % MOD; // nu inteleg de ce
// infoarena
}
// printf("%d %lld\n",cnt, sum);
fout<< cnt << " " << sum <<"\n";
}
}