Pagini recente » Cod sursa (job #2282786) | Cod sursa (job #2499442) | Cod sursa (job #2514841) | Cod sursa (job #1437476) | Cod sursa (job #1861170)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in ("ssnd.in");
ofstream out ("ssnd.out");
long long const mod = 9973;
long long nfactor = 0, factorp[1001];
long long factor[1001];
void gcd(long long a ,long long b ,long long &x ,long long &y){
if(b == 0){
x = 1;
y = 0;
} else{
gcd(b ,a % b ,x ,y);
long long aux = x;
x = y;
y = aux - a / b * y;
}
}
long long power(int a ,int b){
if(b == 0)
return 1;
else if(b == 1)
return a;
else if((b & 1) == 0){
long long result = power(a, b >> 1);
return (result * result) % mod;
} else{
long long result = power(a, b >> 1);
return (((result * result) % mod) * a) % mod;
}
}
void descompunere(long long n){
int i = 2;
if(n % 2 == 0){
factor[nfactor] = 2;
factorp[nfactor]= 0;
while(n % 2 == 0){
factorp[nfactor]++;
n /= 2;
}
nfactor++;
}
i = 3;
while(i * i <= n){
if(n % i == 0){
factor[nfactor] = i;
factorp[nfactor]= 0;
while(n % i == 0){
factorp[nfactor]++;
n /= i;
}
nfactor++;
}
i += 2;
}
if(1 < n){
factor[nfactor] = n;
factorp[nfactor] = 1;
nfactor++;
}
}
int main()
{
long long n ,a ,x = 0,y = 0,s ,nr = 0 ,j;
int i;
in>>n;
for(i = 0 ; i < n ;i++){
in>>a;
nfactor = 0;
descompunere(a);
s = 1;
nr = 1;
for(j = 0 ; j < nfactor ; j++){
nr *= (factorp[j] + 1);
if((factor[j] - 1) % mod == 0){
s = (s * (factorp[j] + 1)) % mod;
} else{
s = (s * (power(factor[j] % mod, factorp[j] + 1) + mod - 1)) % mod;
gcd(factor[j] - 1 ,mod ,x ,y);
if(x < 0){
x = mod + x % mod;
}
s = (s * x) % mod;
}
}
out<<nr<<" "<<s<<'\n';
}
return 0;
}