Pagini recente » Cod sursa (job #1566848) | Cod sursa (job #2466941) | Cod sursa (job #166990) | Cod sursa (job #304729) | Cod sursa (job #2495758)
#include <bits/stdc++.h>
#define MOD 9973
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
long long i,prime[100000],divizori[50],exponenti[50],NUMAR,T,dim,pr,x,numarator,numitor,SUMA;
bitset <1001010> f;
void ciur(){
prime[++pr]=2;
for(int i=3;i<=1001000;i+=2){
if(f[i]==0)
prime[++pr]=i;
for(long long j=i+i+i;j<=1001000;j+=(i<<1))
f[j]=1;
}
}
void factorizare(long long el){
int indice=1;
dim=0;
long long d=prime[indice];
while(el!=1 && d*d<=el){
if(el%d==0){
divizori[++dim]=d;
while(el%d==0){
el/=d;
exponenti[dim]++;
}
}
d=prime[++indice];
}
if(el!=1){
divizori[++dim]=el;
exponenti[dim]++;
}
}
int lgpow (long long a, long long b){
int sol=1;
a%=MOD;
while(b){
if(b&1)
sol=(sol*a) % MOD;
a=(a*a) % MOD;
b>>=1;
}
return sol;
}
int main(){
fin>>T;
ciur();
while(T--){
fin>>x;
factorizare(x);
NUMAR=1;
for(i=1;i<=dim;i++)
NUMAR = (NUMAR*(exponenti[i]+1))%MOD;
fout<<NUMAR<<" ";
SUMA=1;
for(i=1;i<=dim;i++){
numarator= lgpow(divizori[i], exponenti[i]+1);
numarator--;
if(numarator < 0)
numarator+=MOD;
numitor=divizori[i]-1;
SUMA *= (numarator*lgpow(numitor, MOD-2))%MOD;
SUMA%=MOD;
}
fout<<SUMA<<"\n";
for(i=1;i<=dim;i++)
exponenti[i]=0;
}
return 0;
}