Pagini recente » Cod sursa (job #1101329) | Cod sursa (job #2533737) | Istoria paginii utilizator/titusboga | Istoria paginii runda/gym_emag_avansati_2016/clasament | Cod sursa (job #1721020)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool B[1000100];
ll T,P[80000],p,D[80000],R[80000],x,r;
ll const m = 9973;
ll put(ll num,ll e,ll mod){
if(e == 0) return 1;
ll rs = put(num,e/2,mod);
return (((rs*rs)%mod)*(e%2==1 ? num : 1))%mod;
}
ll inv(ll num,ll mod){
return put(num,mod-2,mod);
}
int main(){
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
for(int i = 2;i<=1000000;i++)
if(!B[i]) for(int j = i+i;j<=1000000;j+=i) B[j] = 1;
for(int i = 2;i<=1000000;i++) if(!B[i]) P[p++] = i;
cin >> T;
while(T--){
cin >> x;
int i = 0;
r = 0;
while(x>1 && P[i] <= sqrt(x)+1){
while(x%P[i] != 0 && P[i] <= sqrt(x)+1 && i<p) i++;
if(P[i] > sqrt(x) || p == i) break;
D[++r] = P[i];
R[r] = 0;
while(x%D[r] == 0) R[r]++,x/=D[r];
}
if(x != 1) D[++r] = P[i],R[r] = 1;
ll num=1,sum = 1;
for(int i = 1;i<=r;i++) num=(num*(R[i]+1))%m;
for(int i = 1;i<=r;i++) sum=(((put(D[i],R[i]+1,m)-1)*inv(D[i]-1,m)%m)*sum)%m;
cout << num << ' ' << sum << '\n';
}
return 0;
}