Pagini recente » Cod sursa (job #1722934) | Cod sursa (job #1990826) | Cod sursa (job #378294) | Cod sursa (job #2477382) | Cod sursa (job #2286830)
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int MOD=9973;
//STIM CA n = f1^e1 + f2^e2 +...+ fk^ek
//NR DIVIZORILOR = (e1+1) * (e2+1) * ... *(ek+1)
//SUMA DIVIZORILOR (p1^(d1+1)-1)/(p1-1) * p2^(d2+1)-1)/(p2-1) * ... * pk^(dk+1)-1)/(pk-1)
//nr divizorilor
long long nr=1;
//suma divizorilor
long long numitor=1, numarator=1, p;
long long lg_putere(int a, int b)
{
long long p=1;
while(b>0)
{
if(b&1)
p = (p *(a%MOD))%MOD;
a = ((a%MOD) *(a%MOD))%MOD;
b=b>>1;
}
return p;
}
void factori_primi(long long n)
{
long long d=2;
nr=1;
numarator=numitor=1;
int e=0;
long long aux;
while(d*d<=n and n>1)
{
e=0;
while(n%d==0)
{
e++;
n=n/d;
}
if(e>0)
{
nr=(nr*(e+1))%MOD;
aux=lg_putere(d, e+1);
numarator = (numarator * ( (aux-1) % MOD )) %MOD;
numitor = (numitor * ( (d-1) %MOD ))%MOD;
}
d++;
}
if(n>1)
{
nr=(nr*2)%MOD;
aux=lg_putere(n, 2);
numarator = (numarator * ( (aux-1) % MOD )) %MOD;
numitor = (numitor * ( (n-1) %MOD ))%MOD;
}
//numitorul va fi invers modular
numitor = lg_putere(numitor, MOD-2);
p = (numarator*numitor)%MOD;
}
int main()
{
long long n;
int t;
fin>>t;
for(int i=1;i<=t;i++)
{
fin>>n;
factori_primi(n);
fout<<nr<<" ";
fout<<p<<"\n";
}
return 0;
}