Pagini recente » Cod sursa (job #1806111) | Cod sursa (job #2884771) | Cod sursa (job #1086771) | Cod sursa (job #2182657) | Cod sursa (job #1721026)
#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 && i < p && P[i]*P[i] <= x){
while(i<p && P[i]*P[i] <= x && x%P[i] != 0) i++;
if(i<p && P[i]*P[i] <= x){
D[++r] = P[i];
R[r] = 0;
while(x%D[r] == 0) R[r]++,x/=D[r];
}
}
if(x != 1) D[++r] = x,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;
}