Pagini recente » Cod sursa (job #938229) | Cod sursa (job #342896) | Cod sursa (job #2418021) | Cod sursa (job #112811) | Cod sursa (job #2497045)
#include<fstream>
#include<bitset>
#define MOD 9973
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
long long n, m;
long long T,rest,nr,a,b,p,k;
long long prime[1000010],divizori[1000010],puteri[1000010];
bitset<1000010> v;
int putere (long long a, long long b){
int r=1;
while(b){
if(b%2==1)
r=(r*a)%MOD;
a=a*a%MOD;
b/=2;
}
return r;
}
int main(){
fin>>T;
///ciur
prime[++p]=2;
for(int i=3;i<=1001000;i+=2){
if(v[i]==0)
prime[++p]=i;
for(long long j=i+i+i;j<=1001000;j+=(i<<1))
v[j]=1;
}
///
for(int t=1;t<=T;t++){
fin>>n;m=n;
for(int i=1;i<=k;i++)
puteri[i]=0;
k=0;
int i=1;
while(m!=1 && prime[i]*prime[i]<=m){
if(m%prime[i]==0){
divizori[++k]=prime[i];
while(m%prime[i]==0){
m/=prime[i];
puteri[k]++;
}
}
i++;
}
if(m!=1){
divizori[++k]=m;
puteri[k]++;
}
nr=1;
for(i=1;i<=k;i++)
nr=(nr*(puteri[i]+1))%MOD;
fout<<nr<<" ";
rest=1;
for(i=1;i<=k;i++){
a=putere(divizori[i], puteri[i]+1);
a--;
if(a<0)
a+=MOD;
b=divizori[i]-1;
rest *= (a*putere(b, MOD-2))%MOD;
rest%=MOD;
}
fout<<rest<<"\n";
}
return 0;
}